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) 
共通テーマ:学問

torch7のバリエーションcl-torchはおススメできません [人工知能(ディープラーニング)]

torch7のバリエーションには、open-clで処理をGPUに割り当てるものもあります。
cl-torchとか、distro-clとか呼ばれているものですが…オススメできません。

スクリーンショット 2017-02-10 23.20.12.png
(プログラムのライブラリにclnnやcltorchが含まれているcl-torch動作版のプログラム)


導入してみたのですが…すごく遅いのです。
MacBook Pro (15インチ, 2016)、GPUにRadeon Pro 460を搭載しているモデルでも、下手にOpen-CLなど使わずにCPUで処理した方が早かったほどです。

最初はCPUのパワーを使わずに動いていて、「お、これはいけるか?」と喜んだのですが…
JETSON TK1の5倍もの時間がかかります。(JETSON TK1(CUDA動作)で40秒で終わる処理が、cl-Torchでは200秒以上かかります)

まさかと思って、CPUで動作させると、同じ処理に40秒…しかかかりませんでした。
しかも、別のLINUXのTorch7で作成した人工知能データを読み込ませると、エラーで動作しないというおまけつきです。
発想は良かったのですが…中身が付いてきてませんでした。

CUDAが使えないパソコンの救世主に見えて、実は見掛け倒しという悲しい運命を背負ってしまったようです。

さっそく、cl-Torchは、コマンドラインからさっくり「rm -rf cl-torch」で削除して、通常版のtorch7をインストールしました。
それにしても、2016年のMACBOOK PROはCPU動作でもJETSON TK1のCUDA動作に負けない性能になっていたんですね。
2012年モデルのMAC MINIはTK1にかなり大差で負けてしまうのですが。
(3万円のJETSON TK1が大健闘していると言えるかもしれません)

 結論としては、cl-torchはお勧めできません。
 なにせ、正式なtorch7で作成した人工知能モデルがエラーで動かないのは致命的です。

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:学問

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