grbl1.1+Arduino CNCシールドV3.5+bCNCを使用中。
BluetoothモジュールおよびbCNCのPendant機能でスマホからもワイヤレス操作可能。
その他、電子工作・プログラミング、機械学習などもやっています。
MacとUbuntuを使用。

CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:



*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。


ラベル CNN の投稿を表示しています。 すべての投稿を表示
ラベル CNN の投稿を表示しています。 すべての投稿を表示

2018年11月20日火曜日

Kaggle Digital Recognizer(MNIST): Keras, fit_generator() + hyperopt

Kaggle Digital Recognizer(MNIST)の続きです。前回から少しだけ内容を変えてみたらベストスコアがでました。
改良点は以下です。

fit_generator():
前回は、通常の訓練model.fit()を使った後にData Augmentationとしてmodel.fit_generator()を追加して二段階で訓練しましたが、今回は最初からfit_generator()だけで訓練してみることにしました。

BatchNormalization:
CNNに関しては前回よりも層を少なくして、conv2dの後に必ずBatchNormalization()を入れ、プーリング層(学習なし)を使わずにstrides=2のconv2d()(学習あり)で1/2にダウンサンプリングすることにしました。

Hyperopt:
Hyperoptに関しては前回同様Dropout率だけを最適化しています(合計3箇所)。探索回数はとりあえず10回。

スコア:
結果はこれまでのベストスコアである0.99771(Top 5%)まで向上しました。
この辺りまで来るとスコアを0.001上げるのはかなり至難の技で、正直0.997以上になるとは期待していませんでした。しかし予想以上に満足できる結果が得られたので、Digital Decognizer(MNIST)に関してはひと段落ついたという感じです。

ただし、調べれば調べるほど興味深い項目が登場してきて、今後試してみたいのは:
・他のMNISTデータセットで今回のモデルの精度を確かめてみる(KaggleのMNISTデータセットにオーバーフィッティングしていないかどうかの検証)。
・今回はHyperoptによってDropout率を自動的に決定させましたが、Dropoutを一般化したDropconnectというのもあるらしく、それを使うとどうなるか(Keras Dropconnect Implementation)?

Kaggleで勝つデータ分析の技術
門脇 大輔 阪田 隆司 保坂 桂佑 平松 雄司
技術評論社
売り上げランキング: 363


追記:
その後、既存のkeras.datasets.mnistのデータセット(60000+10000)で検証してみると0.997以上の正解率となりました。おそらくKaggleのMNISTデータも多数含まれているので似たような結果となったのだと思います(しかし偶然KaggleのMNISTデータだけにオーバーフィットしすぎているというわけでもなさそう)。

2018年11月16日金曜日

Kaggle Digital Recognizer(MNIST): Hyperopt + Data Augmentation

引き続きKaggle Digital Recognaizer(MNIST)のスコア向上のため、今回はHyperoptData Augmentationを組み合わせてみました。
結果として、これまで0.995前後(Top 18%)のスコアがでていましたが、今回の方法で0.99671(Top 9%)まで向上しました。それでも28000個あるデータのうち92個が間違っているということになります。


今回の方法:

・畳み込み層を増やしてもう少し特徴量検出できるようにする
・あまり自動調節させるハイパーパラメータは増やさない
・バッチサイズやデータ分割などは一般的な値にしておく
・Dropout率でモデル全体の精度を調整

要は、Hyperoptによるハイパーパラメータ最適化はDropout率(合計5個)だけに絞り、その他は固定。
探索回数は20回(GTX1060で約2時間)。

前回までと異なるのは:
・ダブルの畳み込み層をもう一式追加
・Dense層出力ユニット数の増加
・最後にData Augmentationでの訓練を追加
ということになります。

Data Augmantation(訓練データの変形加工:水増し)するためにKerasのImageDataGeneratorを使用しました。
ImageDataGeneratorを使うには元データのshapeを(-1, 28, 28, 1)にしておく必要があるようです。これまではCNNモデル入力層でkeras.layers.Reshape()を使って(784, )から(-1, 28, 28, 1)に変換していましたが、ImageDataGeneratorの入力次元数とモデルの入力次元数が異なるためエラーがでてしまい、モデルに入力する前に(-1, 28, 28, 1)へ変換することにしました。

流れとしては:
・訓練画像を元にHyperoptで最適化
・最適化されたモデルをData Augmentationで追加訓練
という二段階の訓練です。
Data Augmentationの訓練は結構すぐに収束してしまいましたが、その訓練の差なのかほんのわずか向上しました。


まとめ:
個人的には、これまでスコア0.995が壁になっていて、手動でいろいろ試してみたけれどもなかなか超えられませんでした。今回のスコアは期待していた以上に良かったので、MNISTに関してはもうこの辺で充分かと思いますが、あと試してみたいのは以下。
・最初からImageDataGeneratorで訓練
・交差検証(KFold

基本的なMNIST分類問題ですが、こうやってスコア向上を目標に試してみると、いろんなテクニックが見つかりかなり勉強になります。基本的なCNNアルゴリズムだけでなく、その他の方法も組み合わせることでわずかながらでも向上するということが分かったのもよかったです。

関連:
Kaggle Digital Decognizer(MNIST): Keras, fit_generator() + hyperopt


直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ
Posted with Amakuri at 2018.12.21
Antonio Gulli, Sujit Pal
オライリージャパン
販売価格 ¥3,672

2017年10月4日水曜日

スタンフォード大:CNN for Computer Visionのレクチャー動画

CourseraのDeep Learningコース(コース1〜3)も終わってしまったので、次を探しているところです。興味あるのはConvolutional Neural Network(CNN)、そしてGenerative Adversarial Network(GAN)などのコンピュータービジョンや画像生成に関するアルゴリズムです。

いろいろ調べていると、スタンフォード大のCNNのシリーズレクチャーがありました(以下)。
この動画は今年(2017年)のもので、もうすでに第1回から16回まであります(1動画/約1時間:合計約16時間)。
CS231n: Convolutional Neural Networks for Visual Recognition
というスタンフォード大の授業の動画らしいです。
シラバスのページにはコースマテリアル(資料)のリンクもあり、これに従って一通りCNNについては勉強できそうです。今年の授業なので情報も最新だと思うし。
どうやらこの授業は、今年4/4から開始され、週2回のペース、途中に課題提出などもあり、6/12まで続いていたらしいです。週2回なので、かなりハイペースでやっていると思います。それにしても授業計画ならびにその内容がすごい。いまのアメリカの優れた大学はこんな感じなんですね。
このCNNコースを受講する前に、予備知識としてCS229:Machine Learning(Andrew Ng)を受講しておくといいと言ってますが、これはCourseraのMachine Learningコースの元となっている授業だと思います。
スタンフォード大学コンピューターサイエンス講義リストを見ると、CS230: Deep Learning(Andrew Ng)という授業があり、受講者はCourseraのDeep Learningコースを受けるようと書いてあります。どうやら、CS230の授業とCourseraの授業は同じようです。実際のCS230の授業では、トピックに合わせたさらなるレクチャー、ゲストレクチャーなどがあるようです。シラバスによると、CNNの授業は7週目の11/6からのようなので、それまでにはCourseraのConvolutional Neural Networksも開講するのではないでしょうか。ということであと一ヶ月くらい先という感じ。

追記:
このスタンフォード大学のCNNの動画をしばらく見てみましたが、初回だけFei-Fei Li先生の講義があって、その後はドクターの学生がスライドを見せながらCNNについて講義というか説明しています。教科書の内容をそのまま解説しているだけの授業という感じで、あまり頭に入ってきません。やはり、Andrew NG先生の教え方がいかに上手かというのが分かります。

人気の投稿