SSブログ

torch7:CSVでファイル保存 [人工知能(ディープラーニング)]

データをファイルとして保存するときにいろいろと方法はあるのですが、CSVファイルとして保存するのは意外と面倒だったりします。

 例えば、以下のような単純な10x10の二次元配列をファイルとして保存するだけでも結構面倒です。
--------------------------------------
1 6 8 2 1 7 4 4 9 7
6 9 7 3 8 9 0 9 8 0
8 2 4 6 2 7 8 4 7 7
7 6 9 1 7 2 3 8 1 9
2 4 6 7 5 5 1 5 6 6
8 9 2 3 6 1 7 8 5 0
0 3 4 5 7 4 2 0 8 6
9 6 5 1 3 8 5 9 3 8
0 9 8 9 5 4 5 8 4 2
1 3 5 3 2 1 7 7 4 2
[torch.DoubleTensor of size 10x10]
--------------------------------------

 こんな時は、以前の「パターン認識」でも紹介したcsvigoを使えば簡単です。

(今回はコマンドラインで直接動かしていますが、プログラムとしてファイルに保存しても動作はできます)

基本的にはこれだけです。

require 'csvigo'
a=torch.Tensor(10,10):random(0,9)
b=torch.totable(a)
csvigo.save{data=b,path='test.csv'}

解説すると…
-- csvigoライブラリーを読み込む
require 'csvigo'
-- 10x10の数値(Tensor)を乱数で作る
a=torch.Tensor(10,10):random(0,9)
-- torch.Tensor形式のaを、テーブル形式でbにセットする
b=torch.totable(a)
-- csvigo.saveを使って、ファイルとしてむ保存
-- 「data=」に続いてテーブルの変数、「path='ファイル名'」をつけます
-- カッコ()ではなく、{ }を使ってください。
csvigo.save{data=b,path='test.csv'}

たったこれだけです。
これでCSVファイルとして保存できます。
ただし、ここで注意するポイントがあります。

単純に
1
8
5
6
7
4
1
3
6
8

のようにファイルを出力したい場合、Tensorは
th> a
1
8
5
6
7
4
1
3
6
8
[torch.DoubleTensor of size 10]と単純な10個の配列を元にして、保存用テーブルのデータを作ってcsvigoライブラリで保存しようとしてもエラーになってしまいます。

具体的にはテーブルの変数 b
{
1 : 1
2 : 8
3 : 5
4 : 6
5 : 7
6 : 4
7 : 1
8 : 3
9 : 6
10 : 8
}
*このデータをcsvigoで保存しようするとエラーになります。

このような場合には、
-- まずは10個の配列を 1x10に直して
a=a:repeatTensor(a,1,1)
-- それを10x1に「t()」で行と列を入れ替えた配列に直して
a=a:t()
-- テーブル形式に変換します
a=torch.totable(a)
という感じで、10x1の配列(テンソル)としてデータに直して、それをテーブルに変換する必要があります。(もっとスマートな方法があるかもしれません)

th> a
9
6
9
8
7
9
1
4
1
8
[torch.DoubleTensor of size 10x1]

 これが最終的には…
th> b
{
1 :
{
1 : 9
}
2 :
{
1 : 6
}
3 :
{
1 : 9
}
4 :
{
1 : 8
}
5 :
{
1 : 7
}
6 :
{
1 : 9
}
7 :
{
1 : 1
}
8 :
{
1 : 4
}
9 :
{
1 : 1
}
10 :
{
1 : 8
}
}
こんな形になります。
これであれば縦に数字が並んだCSVファイルが作成できます。
th> csvigo.save{path='ttt.csv',data=b}
<csv> writing to file: ttt.csv
<csv> writing done
これでもうCSVファイルでの保存ができるのでいろいろと利用範囲が広がります。

スクリーンショット 2017-02-12 1.49.26.png
(CSVでの保存例)

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。