-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_DataMiningPythonDL
TensorFlow・Kerasを使ったPythonでのDeep Learning
- イメージを変えてPySparkの該当節の例と同様にできる。
- 使用するイメージは、tensorflow/tensorflow:latest-jupyter
-
インストール
!pip install --upgrade pip-
tensorflow
!pip install -U tensorflow -
keras
!pip install -U keras -
その他
色々、足りてない。!pip install numpy !pip install pandas !pip install seaborn !pip install statsmodels !pip install scikit-learn !pip install opencv-python
-
-
警告の非表示
import warnings warnings.filterwarnings('ignore')
-
インポート
-
基本的なライブラリ
NumPy, Pandas, Matplotlibimport pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline
-
TensorFlow
import tensorflow as tf from tensorflow.keras.layers import BatchNormalization print(tf.__version__)
-
Keras
import keras print(keras.__version__) # モデル定義 from keras.models import Model, Sequential, model_from_json from keras.layers import Dense, Input, Activation, Flatten, Dropout, LSTM from keras.layers.convolutional import Conv2D from keras.layers.pooling import MaxPool2D from keras.callbacks import EarlyStopping, ModelCheckpoint from keras import optimizers from keras.optimizers import SGD, Adam # その他 from keras.applications.vgg16 import VGG16 from keras.utils import np_utils
-
from sklearn import metrics from sklearn.metrics import confusion_matrix as cm from sklearn.model_selection import train_test_split
-
opencv-python
-
import
import cv2 # OpenCV
-
以下のエラーになる場合、
「cannot open shared object file: No such file or directory」
以下のコマンドを Terminal(Jupyter Notebookの該当節を参照)から実行する。apt-get update && apt-get upgrade -y apt-get install -y libgl1-mesa-dev apt-get install -y libopencv-dev
-
-
その他
from statsmodels.tsa.seasonal import seasonal_decompose
-
勾配降下法についてはニューラルネットワーク(学習)の該当節を参照。
-
SGD
lr:学習率(0以上のfloat)optimizer = optimizers.SGD(lr=0.01)
-
MomentumSGD
SGDのコードに「momentum」(慣性項の係数(0以上のfloat))を追加。optimizer = optimizers.SGD(lr=0.01, momentum=0.9)
-
NesterovAG
(Nesterov Accelerated Gradient)
MomentumSGDのコードに「nesterov=True」を追加。optimizer = optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True)
-
AdaGrad
デフォルト・パラメタが推奨- lr :学習率(0以上のfloat)
- epsilon:分母の最小値(0以上のfloat)
- decay :学習率減衰(0以上のfloat)
optimizer = optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.0)
-
RMSprop
(Root Mean Square Propagation)- AdaGradのコードに「rho」(指数移動平均)を追加。
- 学習率以外はデフォルト・パラメタが推奨
optimizer = optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0)
-
AdaDelta
- AdaGradのコードに「rho」(指数移動平均)を追加。
- デフォルト・パラメタが推奨
optimizer = optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=None, decay=0.0)
-
Adam
(ADAptive Moment estimation)- beta_1 :MomentumSGDのmomentum
- beta_2 :RMSpropのrho
- amsgrad:AMSGradを適用するかどうか。
optimizer = optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
補足(最新化)
上記のlr=は現行の Keras では非推奨で、learning_rate=を使用する (decay=も廃止され、学習率スケジューラで代替する)。
過学習を抑止する手法については深層学習のテクニックの該当節を参照。
-
データ正規化(データマイニング(DM)- CRISP-DMの該当節を参照)
-
重みの初期化
-
早期終了(early stopping)
-
EarlyStoppingクラス
- monitor :監視する値
- patience:指定エポック数(ニューラルネットワーク(学習)の該当節を参照)の間、改善がない場合、学習を停止
- mode :収束判定(auto: 自動, min: 最小時, max: 最大時)
- verbose :標準出力で通知をするか否か
es = EarlyStopping(monitor='val_loss', patience=5, mode='min', verbose=0) hist = model.fit(x_train_std , y_train, validation_data=(x_test_std, y_test), batch_size=batch_size, epochs=n_epoch, verbose=1, callbacks=[es]) # EarlyStoppingを適用
-
ModelCheckpointクラス
検証誤差が最も低い状態のモデルを保存- monitor :監視する値(デフォルト: val_loss)
- mode :収束判定(auto: 自動, min: 最小時, max: 最大時)
- verbose :標準出力で通知をするか否か
- filepath :モデルを保存するファイルパス
- save_best_only:最良の状態のモデルのみを保存するかどうか(bool)
mc = ModelCheckpoint(monitor='val_loss', mode='min', verbose=1, filepath='./dl4', save_best_only=True) hist = model.fit(x_train_std , y_train, validation_data=(x_test_std, y_test), batch_size=batch_size, epochs=n_epoch, verbose=1, callbacks=[mc]) # ModelCheckpointを適用
-
-
バッチ正規化(Batch Normalization)
model.add(BatchNormalization())
-
ドロップアウト(Dropout)
最終層より前に以下を追加。# 無効化比率0.5のDropout model.add(Dropout(rate=0.5))
-
CNNの場合(データマイニング(DM)- Python - CNNの該当節を参照)、
- データ拡張(data augmentation)
- バッチ正規化(Batch Normalization)
-
モデルの保存
# モデルはjson形式 json_string = model.to_json() with open('mnist.model', 'w') as f: f.write(json_string) # パラメータはhdf5形式 model.save_weights('param.hdf5')
-
モデルの復元
復元後、再度コンパイルが必要になる。# モデルはjson形式 with open('mnist.model', 'r') as f: json_string = f.read() model = model_from_json(json_string) # パラメータはhdf5形式 model.load_weights('param.hdf5')
移行メモ
- Adam の
beta_2の説明が「AdaGradのrho」となっていたが、AdaGrad に rho は無く、 指数移動平均の係数は RMSprop で導入されたものなので「RMSpropのrho」に修正した。- 「(0以上のfloat」「(0以上のF」など閉じ括弧の欠落を補い、表記を float に統一した。
keras.layers.convolutional/keras.layers.pooling/keras.utils.np_utilsは 現行の Keras では廃止・移動しているが、元 Wiki の記述をそのまま残した。- マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への URL リンクは、移行済みの Azure Machine Learningチュートリアル に張り替えた。
- PukiWiki のページ内アンカ(
#xxxxxxxx)は GitHub Wiki では再現できないため、 他ページのアンカを指すリンクは「〜(ページ名の該当節を参照)」の形に置き換えた。
Tags: 移行, データマイニング, 深層学習, Python, Keras, TensorFlow, 勾配降下法, 過学習, Dropout
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。