ホーム » Keras » Keras : FAQ

Keras : FAQ

Keras : FAQ(翻訳/要約)

* 本ページは、Keras 本家サイトの Keras : FAQ の簡単な要約です。

 

Keras FAQ: Frequently Asked Keras Questions

GPU 上で Keras をどのように実行しますか?

Tensorflow バックエンド上で実行しているのであれば、利用可能な GPU が検知されれば貴方のコードは自動的に GPU で動作します。Theano バックエンド上で実行しているのであれば、次のメソッドの一つが使用できます :

メソッド 1: Theano フラグを使用する。

THEANO_FLAGS=device=gpu,floatX=float32 python my_keras_script.py

名前 ‘gpu’ はデバイスの識別子に依存して変更する必要があるかもしれません (e.g. gpu0, gpu1, etc)。

メソッド 2: .theanorc を設定する: Instructions

メソッド 3: コードの冒頭で theano.config.device, theano.config.floatX を手動設定します :

import theano
theano.config.device = 'gpu'
theano.config.floatX = 'float32'

Keras モデルをどのように保存できますか?

Keras モデルを保存するために pickle または cPickle を使うことは推奨されません。

モデルのアーキテクチャのみを、その重みではなく、保存する必要がある場合は、次のようにできます :

# JSON として保存
json_string = model.to_json()

# YAML として保存
yaml_string = model.to_yaml()

そしてこのデータからフレッシュなモデルを構築できます :

# JSON からモデル再構築:
from keras.models import model_from_json
model = model_from_json(json_string)

# YAML からモデルを再構築
model = model_from_yaml(yaml_string)

モデルの重みを保存する必要がある場合は、下のコードで HDF5 でそのようにできます。

HDF5 と Python ライブラリ h5py を最初にインストールする必要があることに注意してください、これらは Keras にバンドルされて入ってはきません。

model.save_weights('my_model_weights.h5')

モデルをインスタンス化するためのコードがあるとすれば、保存した重みを同じアーキテクチャのモデルにロードすることができます :

model.load_weights('my_model_weights.h5')

これはモデルを保存してシリアライズされたデータのみから再構築する方法へとつながります :

json_string = model.to_json()
open('my_model_architecture.json', 'w').write(json_string)
model.save_weights('my_model_weights.h5')

# elsewhere...
model = model_from_json(open('my_model_architecture.json').read())
model.load_weights('my_model_weights.h5')

何故、訓練中の損失はテスト中の損失よりもかなり高いのでしょうか?

Keras モデルは2つのモードがあります: 訓練 (training) とテスト (testing) です。Dropout と L1/L2 重み正則化のような、正則化メカニズムはテスト時には無効にされます。更に、訓練中の損失は訓練データの各バッチ上の損失の平均です。貴方のモデルは時間をかえて変わっていきますから、エポックの最初のバッチ群上の損失は一般に最後のバッチ群のものよりも高くなります。その一方で、エポックに対するテスト中のロスはエポックの最後におけるモデルを使用して計算されますので、より低い損失になります。

どのようにして中間層 (intermediate layer) の出力を視覚化できますか?

ある入力が与えられた時のある層の出力を返す Keras 関数を構築できます、例えば :

from keras import backend as K

# Sequential モデルで
get_3rd_layer_output = K.function([model.layers[0].input],
                                  [model.layers[3].get_output(train=False)])
layer_output = get_3rd_layer_output([X])[0]

# Graph モデルで
get_conv_layer_output = K.function([model.inputs[i].input for i in model.input_order],
                                   [model.nodes['conv'].get_output(train=False)])
conv_output = get_conv_layer_output([input_data_dict[i] for i in model.input_order])[0]

同様に、Theano と TensorFlow 関数を直接構築することもできます。

メモリに fit in しないデータセットで Keras がどのように使えますか?

model.train_on_batch(X, y) そして model.test_on_batch(X, y) を使用してバッチ訓練を行なうことができます。モデル 文書参照。
See the models documentation.

代わりに、訓練データのバッチを生成する generator を書いてメソッド model.fit_generator(data_generator, samples_per_epoch, nb_epoch) を使うこともできます。

実際に CIFAR 10 サンプル でバッチ訓練を見ることができます。

検証ロスがそれ以上減少しない時、どのように訓練を中断できますか?

EarlyStopping callback が使用できます :

from keras.callbacks import EarlyStopping
early_stopping = EarlyStopping(monitor='val_loss', patience=2)
model.fit(X, y, validation_split=0.2, callbacks=[early_stopping])

callbacks 文書 で詳細が見つかります。

どのように検証分割が計算されるのでしょう?

model.fit の validation_split 引数を例えば 0.1 に設定すれば、使用される検証データはデータの最後の 10% になります。それを 0.25 に設定すれば、データの最後の 25 % になります等々。

データは訓練中にシャッフルされますか?

はい、model.fit の shuffle 引数が True (これはデフォルト)に設定されていれば、訓練データは各エポックでランダムにシャッフルされます。

検証データはシャッフルされません。

各エポックでどのように訓練 / 検証損失 / 精度を記録できますか?

model.fit メソッドは History callback を返し、これは連続的な損失 / 精度のリストを含む history 属性を持ちます。

hist = model.fit(X, y, validation_split=0.2)
print(hist.history)

ステートフル RNN をどのように使用できますか?

RNN をステートフルにするということは、各バッチのサンプルのための状態が次のバッチのサンプルのための初期状態として再利用されることを意味しています。

ステートフル RNN を使用する時は、それゆえに次を仮定します :

  • 全てのバッチは同じ数のサンプルを持ちます。
  • もし X1 と X2 がサンプルの連続するバッチであるならば、全ての i について、X2[i] は X1[i] に対する follow-up シーケンスです。

RNN でステートフルネスを使用するためには、次が必要です :

  • batch_input_shape 引数をモデルの最初の層に渡すことによって、明示的に使用するバッチサイズを指定します、それは整数のタプルで、例えば、時間ステップ毎に 16 の特徴で 10 時間ステップのシーケンスの 32-サンプル バッチのためには、(32, 10, 16) 。
  • RNN 層(群)で stateful=True を設定します。

積算された状態をリセットするには :

  • モデルの全ての層の状態をリセットするために model.reset_states() を使用します。
  • 特定のステートフル RNN 層の状態をリセットするためには layer.reset_states() を使用します。

サンプル:

X  # これは shape (32, 21, 16) の入力データ
# 長さ 10 のシーケンスの中でそれをモデルに供給します。

model = Sequential()
model.add(LSTM(32, batch_input_shape=(32, 10, 16), stateful=True))
model.add(Dense(16, activation='softmax'))

model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

# 最初の 10 が与えられた時の 11 番目の時間ステップを予測するネットワークを訓練します。
model.train_on_batch(X[:, :10, :], np.reshape(X[:, 10, :], (32, 16)))

# the state of the network has changed. We can feed the follow-up sequences:
model.train_on_batch(X[:, 10:20, :], np.reshape(X[:, 20, :], (32, 16)))

# LSTM 層の状態をリセットしましょう :
model.reset_states()

# この場合にそれを行なう他の方法
model.layers[0].reset_states()

メソッド predict, fit, train_on_batch, predict_classes, etc. は全てモデルのステートフル層の状態を更新することに注意してください。これはステートフル訓練だけでなく、ステートフル予測も行なうことを可能にします。

どのように Keras を cite(引用/参照) すべきでしょう?

Please cite Keras in your publications if it helps your research. Here is an example BibTeX entry:

@misc{chollet2015keras,
author = {Chollet, François},
title = {Keras},
year = {2015},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/fchollet/keras}}
}

 

以上

AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com