Skip to content

DNET_DataMiningPythonDL

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

データマイニング(DM)- Python - DL

概要

TensorFlow・Kerasを使ったPythonでのDeep Learning

詳細

準備

on Jupyter on Docker

  • イメージを変えて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, Matplotlib

      import 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
    • scikit-learn

      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

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally