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

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



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


2018年11月5日月曜日

Auto-KerasでKaggle:Digit Recognizer(Mnist)を試す

引き続きKaggleのDigit Recognizer(Mnist)を試しています。少しでもスコアを上げようとハイパーパラメータを調整しては提出を繰り返していましたが、このハイパーパラメータ調整を自動化してくれるAuto-Kerasというライブラリがあったので試してみることにしました。




基本的には数行のコードでMnistなどの画像分類をしてくれます(以下)。

from keras.datasets import mnist
from autokeras.image_supervised import ImageClassifier

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape + (1,))
x_test = x_test.reshape(x_test.shape + (1,))

clf = ImageClassifier(verbose=True)
clf.fit(x_train, y_train, time_limit=12 * 60 * 60)
clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
y = clf.evaluate(x_test, y_test)
print(y)

内部の細かい仕組みについては検証していませんが、これでモデルやバッチサイズなど自動的に決めてくれるようです。いくつかのモデルやハイパーパラメータを試して、結果論的にベストなものを選ぶという感じでしょうか。

ということで、上記サンプルをKaggleのデータに置き換えて試してみました。
訓練用データを訓練と検証用データに分けて、メモリーの限度を超えないように、dtypeをint64からuint8に変換しています。

結果を得るためには、fit()内のtime_limitで時間設定する必要があるようです。とりあえず1時間試してみると、結果は0.98738で0.99には届きませんでした(前回のCNNで0.99528)。デフォルトでは24時間になっているので、もう少し長い時間かけたほうがいいのかもしれません。


まとめ:
以前ベイズ最適化(ハイパーパラメータチューニングのアルゴリズム)を試してみましたが、こんな短いコードで済んでしまうのは便利です。Mnistの場合は手動でハイパーパラメータを調節してもそれなりの結果(スコア:0.99以上)が出せますが、未知のモデルに対するベースラインをとりあえず出してみるときにいいのかもしれません。
ただし、最低でも数時間は回し続けなければいけないので、途中でエラーがでてしまうとまたやり直しというのが面倒です。
autokerasの場合は完全自動化なので、特定のハイパーパラメータを自動化できるGpyOptを使ったベイズ最適化も試してみたいと思います(こちらの例とか)。

参考にしたサイト:
https://www.simonwenkel.com/2018/08/29/introduction-to-autokeras.html

0 件のコメント:

コメントを投稿