雑多な趣味の記録帳

tom01h.exblog.jp

2018年 07月 10日 ( 1 )

tiny-dnn 試行2

C++ 言語で記述されたニューラルネットのフレームワークの tiny-dnn を試しています。
これ、とりあえず動くようになりましたが、Intel CPU で動かしてもとっても遅いです。
$cd examples/mnist
$ g++ -pthread -Wall -Wpedantic -Wno-narrowing -Wno-deprecated -O3 -DNDEBUG -std=gnu++14 -I ../../ -DDNN_USE_IMAGE_API train.cpp -o train
$ ./train --data_path ../../data/ --learning_rate 1 --epochs 3 --minibatch_size 16 --backend_type internal
MNIST ごときに 60000 の学習データは必要ないので、20000 に減らします。
train_labels.resize(20000);
train_images.resize(20000);
当たり前ですが、だいたい3倍速くなります。
次に tanh を relu,sontmax に変更して、LeNet 特有の良く分からない connection_table を無しにします。打ち消しあったのか、速くなりません。併せて learning_rate 0.3 にすると、学習データを 20000 にして下がった分の認識率が元に戻ります。
次に、pooling を max pooling に変更して、層も1層減らすと全部で 5倍速くなりました。
さらに、入力データのパディングをやめて learning_rate 1 に戻すと、まだちょっとだけ速くなります。
nn << conv(28, 28, 5, 1, 6, padding::valid, true, 1, 1, backend_type)
<< maxpool(24, 24, 6, 2)
<< relu()
<< conv(12, 12, 5, 6, 16, padding::valid, true, 1, 1, backend_type)
<< maxpool(8, 8, 16, 2)
<< relu()
<< conv(4, 4, 4, 16, 10, padding::valid, true, 1, 1, backend_type)
<< softmax(10);
これくらい速くなるといろいろ試せますかね?
[PR]
by tom01h | 2018-07-10 22:34 | Trackback | Comments(0)