ベイズ最適化のセーブ&リストア

Pythonでベイズ最適化を行うパッケージ GPyOpt - Qiita

こちらの記事を参考にベイズ最適化を使ってみた。

 

最適化の途中で別のことをしたくなった時にどうするのかと思って調べたらGitHubのissueに書いてあった。

How to save and load · Issue #69 · SheffieldML/GPyOpt · GitHub

 

  • セーブ

myBopt = GPyOpt.methods.BayesianOptimization(f=f, domain=bounds)

myBopt.run_optimization(max_iter=5)

np.savez_compressed('./param.npz', myBopt.X, myBopt.Y)

 

  • リストア

npzfile = np.load('./param.npz')
X = npzfile['arr_0']
Y = npzfile['arr_1']

myBopt2 = GPyOpt.methods.BayesianOptimization(f=f, domain=bounds, X=X, Y=Y)

myBopt2.run_optimization(max_iter=5)

Deep Learning実装祭りに行ってきた

これに行ってきた。

naniwa-tech-dou.connpass.com

 

モルフォの話が実践的なノウハウがあって面白かった。

 

アクティベーションマップ

ニューロンの活性化状態をサーモグラフィのように表示していた。

www.youtube.com

実際にユーザーからの要望でこの機能を追加したらしい。質問の時に参考論文を聞かれてモルフォの人はお茶を濁していたけど、たぶんこの論文だと思う。

[1506.06579] Understanding Neural Networks Through Deep Visualization

ニューラルネットブラックボックスという記事をよく見かけるが、技術者ならせめてこのぐらいは分かると言いたい。

これTensorflowに欲しい。

画像管理システム

ディープラーニングに用いる画像をフォルダ管理していると混乱してくるので、データベースを作ったらしい。

タグ付けを効率よくできるようにGUIやショートカットを工夫していた。

~ではないというネガティブタグをつけていた。バックグラウンドクラスもそうだが、ネガティブタグも精度を上げることができるかもしれない。

 

Data leakageについて

テストデータに余計な情報が含まれてしまうと精度が信頼できなくなる。

例えば、データアーギュメンテーションしてからトレーニングデータとテストデータを分けるとどうなるか?

こうすると同じデータを平行移動しただけのデータでテストするようなことが起きる。

過学習していたとしてもテストデータの精度も高くなるので気づかない。

全く新しいデータでテストして精度が出ずに悩むことになる。

トレーニングデータとテストデータを分けてからトレーニングデータだけデータアーギュメンテーションするのが良い方法だと思う。

Leakage | Kaggle

machine learning - How to do data augmentation and train-validate split? - Cross Validated