ModelクラスAPI

functional APIでは、テンソルの入出力が与えられると、Modelを以下のようにインスタンス化できます。

from keras.models import Model
from keras.layers import Input, Dense

a = Input(shape=(32,))
b = Dense(32)(a)
model = Model(input=a, output=b)

このモデルは、aを入力としてbを計算する際に必要となるあらゆる層を含むことになります。

また、マルチ入力またはマルチ出力のモデルの場合は、リストを使うこともできます。

model = Model(input=[a1, a2], output=[b1, b3, b3])

Modelの詳しい解説は、Keras functional APIをご覧下さい。

モデルの便利な属性

  • model.layers はモデルのグラフで構成される層を平坦化したリストです。
  • model.inputs はテンソル入力のリストです。
  • model.outputs はテンソル出力のリストです。

メソッド

compile

compile(self, optimizer, loss, metrics=[], loss_weights=None, sample_weight_mode=None)

学習のためのモデルを設定します。

引数

  • optimizer: 文字列(optimizer名)またはoptimizerのオブジェクト。詳細はoptimizersを参照。
  • loss: 文字列(目的関数の名前)または目的関数。詳細はobjectivesを参照。モデルが複数の出力を持つ場合は、オブジェクトの辞書かリストを渡すことで、各出力に異なる損失を用いることができます。
  • metrics: 学習時とテスト時にモデルにより評価されるメトリクスのリスト。一般的にはmetrics=['accuracy']を使うことになります。マルチ出力モデルの各出力のための各メトリクスを指定するために、metrics={'output_a': 'accuracy'}のような辞書を渡すこともできます。
  • sample_weight_mode: タイムステップ毎にサンプルを重み 付け(2次元の重み)する場合は、この値を「temporal」に設定してください。「None」はデフォルト値で、サンプル毎の重み(1次元の重み)です。モデルが複数の出力をする時、modeの辞書かリストを渡すことで、各出力に異なるsample_weight_modeを使うことができます。
  • kwargs: バックエンドにTheanoを用いる時は、これら引数はK.functionに渡されます。Tensorflowバックエンドの場合は無視されます。

fit

fit(self, x, y, batch_size=32, nb_epoch=10, verbose=1, callbacks=[], validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None)

固定回数(データセットの反復)の試行でモデルを学習させます。

引数

  • x: 学習データのNumpy配列、もしくはモデルが複数の入力を持つ場合はNumpy配列のリスト。 モデル内のあらゆる入力が名前を当てられている場合、入力の名前とNumpy配列をマップした辞書を渡すことも可能です。
  • y: 教師(targets)データのNumpy配列、もしくはモデルが複数の出力を持つ場合はNumpy配列のリスト。 モデル内のあらゆる出力が名前を当てられている場合、出力の名前とNumpy配列をマップした辞書を渡すことも可能です。
  • batch_size: 勾配更新毎のサンプル数を示す整数。
  • nb_epoch: 学習データ配列の反復回数を示す整数。
  • verbose: 冗長モードで0、1、2のいずれかを指定。0 = 表示なし、1 = 冗長、2 = 各試行毎に一行の出力。
  • callbacks: 学習時に呼ばれるコールバックのリスト。 詳細はcallbacksを参照。
  • validation_split: 0から1の間のfloat値: バリデーションデータとして使われる学習データの割合。 モデルはこの割合の学習データを区別し、それらでは学習を行わず、各試行の終わりにこのデータにおける損失とモデルメトリクスを評価します。
  • validation_data: 各試行の最後に損失とモデルメトリクスを評価するためのデータ。モデルはこのデータで学習を行いません。この値は(x_val, y_val)のタプル、または(val_x, val_y, val_sample_weights)のタプルとなり得ます。
  • shuffle: 学習データを各試行の前にシャッフルするかどうかを示すboolean。
  • class_weight: クラスのインデックスと重み(float)をマップするオプションの辞書で、学習時に各クラスのサンプルに関するモデルの損失に適用します。 これは過小評価されたクラスのサンプルに「より注意を向ける」ようモデルに指示するために有用です。
  • sample_weight: xと同じサイズのオプションの配列で、各サンプルに関してモデルの損失に割り当てる重みを含みます。 時間データの場合に、(samples, sequence_length)の形式の2次元配列を渡すことができ、各サンプルの各タイムステップに異なる重みを割り当てられます。 この場合、compile()内で、sample_weight_mode="temporal"と指定するようにします。

戻り値

Historyインスタンス。本インスタンスのhistory属性は学習時に得られた全ての情報を含みます。


evaluate

evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)

テストモードにおいて、モデルの損失値とメトリクス値を返します。処理はバッチで行われます。

引数

  • x: テストデータのNumpy配列、もしくはモデルが複数の入力を持つ場合はNumpy配列のリスト。 モデル内のあらゆる入力が名前を当てられている場合、入力の名前とNumpy配列をマップした辞書を渡すことも可能です。
  • y: 教師データのNumpy配列、もしくはモデルが複数の出力を持つ場合はNumpy配列のリスト。 モデル内のあらゆる出力が名前を当てられている場合、出力の名前とNumpy配列をマップした辞書を渡すことも可能です。
  • batch_size: 勾配更新毎のサンプル数を示す整数。

戻り値

テストの損失を表すスカラー値(モデルが単一の出力を持ち、かつメトリクスがない場合) または、スカラー値のリスト(モデルが複数の出力やメトリクスを持つ場合)。 model.metrics_names属性はスカラー出力の表示ラベルを提示します。


predict

predict(self, x, batch_size=32, verbose=0)

入力サンプル毎の出力予測を、バッチ処理でサンプルを計算することにより生成します。

引数

  • x: Numpy配列の入力データ (もしくはモデルが複数の出力を持つ場合はNumpy配列のリスト)
  • batch_size: 整数値。
  • verbose: 冗長モードで、0または1。

戻り値

予測結果のNumpy配列。


train_on_batch

train_on_batch(self, x, y, sample_weight=None, class_weight=None)

単一バッチデータにつき一度の勾配更新を行います。

引数

  • x: 学習データのNumpy配列、もしくはモデルが複数の入力を持つ場合はNumpy配列のリスト。 モデル内のあらゆる入力が名前を当てられている場合、入力の名前とNumpy配列をマップした辞書を渡すことも可能です。
  • y: 教師データのNumpy配列、もしくはモデルが複数の出力を持つ場合はNumpy配列のリスト。 モデル内のあらゆる出力が名前を当てられている場合、出力の名前とNumpy配列をマップした辞書を渡すことも可能です。
  • sample_weight: xと同じサイズのオプションの配列で、各サンプルに関してモデルの損失に割り当てる重みを含みます。 時間データの場合に、(samples, sequence_length)の形式の2次元配列を渡すことができ、各サンプルの各タイムステップに異なる重みを割り当てられます。 この場合、compile()内で、sample_weight_mode="temporal"と指定するようにします。
  • class_weight: クラスのインデックスと重み(float)をマップするオプションの辞書で、学習時に各クラスのサンプルに関するモデルの損失に適用します。 これは過小評価されたクラスのサンプルに「より注意を向ける」ようモデルに指示するために有用です。

戻り値

学習の損失を表すスカラー値(モデルが単一の出力を持ち、かつメトリクスがない場合) または、スカラー値のリスト(モデルが複数の出力やメトリクスを持つ場合)。 model.metrics_names属性はスカラー出力の表示ラベルを提示します。


test_on_batch

test_on_batch(self, x, y, sample_weight=None)

サンプルの単一バッチでモデルをテストします。

引数

  • x: テストデータのNumpy配列、もしくはモデルが複数の入力を持つ場合はNumpy配列のリスト。 モデル内のあらゆる入力が名前を当てられている場合、入力の名前とNumpy配列をマップした辞書を渡すことも可能です。
  • y: 教師データのNumpy配列、もしくはモデルが複数の出力を持つ場合はNumpy配列のリスト。 モデル内のあらゆる出力が名前を当てられている場合、出力の名前とNumpy配列をマップした辞書を渡すことも可能です。
  • sample_weight: xと同じサイズのオプションの配列で、各サンプルに関してモデルの損失に割り当てる重みを含みます。 時間データの場合に、(samples, sequence_length)の形式の2次元配列を渡すことができ、各サンプルの各タイムステップに異なる重みを割り当てられます。 この場合、compile()内で、sample_weight_mode="temporal"と指定するようにします。

戻り値

テストの損失を表すスカラー値(モデルが単一の出力を持ち、かつメトリクスがない場合) または、スカラー値のリスト(モデルが複数の出力やメトリクスを持つ場合)。 model.metrics_names属性はスカラー出力の表示ラベルを提示します。


predict_on_batch

predict_on_batch(self, x)

サンプルの単一バッチに関する予測を返します。


fit_generator

fit_generator(self, generator, samples_per_epoch, nb_epoch, verbose=1, callbacks=[], validation_data=None, nb_val_samples=None, class_weight={}, max_q_size=10, nb_worker=1, pickle_safe=False)

Pythonジェネレータによりバッチ毎に生成されたデータでモデルを学習します。 本ジェネレータは効率性のためモデルに並列して実行されます。 例えば、モデルをGPUで学習させながらCPU上で画像のリアルタイムデータ拡張を行うことができるようになります。

引数

  • generator: ジェネレータ。本ジェネレータの出力は、以下のいずれかです。
    • (inputs, targets)のタプル。
    • (inputs, targets, sample_weights)のタプル。 すべての配列は同じ数のサンプルを含む必要があります。 本ジェネレータは無期限にそのデータをループさせるようになっています。 samples_per_epoch数のサンプルがモデルに与えられると1度の試行が終了します。
  • samples_per_epoch: 次の試行に移る前に処理されるサンプル数を示す整数。
  • nb_epoch: データの反復回数の合計を示す整数。
  • verbose: 冗長モードで、0、1、2のいずれか。
  • callbacks: 学習時に呼ばれるコールバックのリスト。
  • validation_data: これは以下のいずれかです。
    • バリデーションデーた用のジェネレータ
    • (inputs, targets)のタプル。
    • (inputs, targets, sample_weights)のタプル。
  • nb_val_samples: validation_dataがジェネレータの場合にのみ関係します。 各試行の最後にバリデーションジェネレータから使うサンプル数を示します。
  • class_weight: クラスインデックスと各クラスの重みをマップする辞書です。
  • max_q_size: ジェネレータのキューの最大サイズです。
  • nb_worker: スレッドベースのプロセス使用時の最大プロセス数
  • pickle_safe: Trueならスレッドベースのプロセスを使います.実装がmultiprocessingに依存しているため,子プロセスに簡単に渡すことができないものとしてPickableでない引数をgeneratorに渡すべきではないことに注意してください.

戻り値

Historyオブジェクト

def generate_arrays_from_file(path):
    while 1:
    f = open(path)
    for line in f:
        # create numpy arrays of input data
        # and labels, from each line in the file
        x1, x2, y = process_line(line)
        yield ({'input_1': x1, 'input_2': x2}, {'output': y})
    f.close()

model.fit_generator(generate_arrays_from_file('/my_file.txt'),
        samples_per_epoch=10000, nb_epoch=10)

evaluate_generator

evaluate_generator(self, generator, val_samples, max_q_size=10, nb_worker=1, pickle_safe=False)

データジェネレータでモデルを評価します。ジェネレータはtest_on_batchで受け取られたのと同じ種類のデータを返す必要があります。

  • 引数:
  • generator: (inputs, targets)もしくは(inputs, targets, sample_weights)のタプルを与えるジェネレータ
  • val_samples: returnまでの間にgeneratorから生成されるサンプルの合計数
  • max_q_size: ジェネレータのキューのための最大サイズ
  • nb_worker: スレッドベースのプロセス使用時の最大プロセス数
  • pickle_safe: Trueならスレッドベースのプロセスを使います.実装がmultiprocessingに依存しているため,子プロセスに簡単に渡すことができないものとしてPickableでない引数をgeneratorに渡すべきではないことに注意してください.

戻り値

テストの損失を表すスカラー値(モデルが単一の出力を持ち、かつメトリクスがない場合) または、スカラー値のリスト(モデルが複数の出力やメトリクスを持つ場合)。 model.metrics_names属性はスカラー出力の表示ラベルを提示します。


predict_generator

ジェネレータのデータに対して予測します。ジェネレータは predict_on_batch が受け取るデータと同じ種類のデータを返却するべきです。

predict_generator(self, generator, val_samples, max_q_size=10, nb_worker=1, pickle_safe=False)

引数

  • generator: (inputs, targets)あるいは(inputs, targets, sample_weights)のタプルを生成するジェネレーター.
  • val_samples: 値を返すまでに generator により生成されるサンプルの総数
  • max_q_size: ジェネレータのキューの最大サイズ
  • nb_worker: スレッドベースのプロセス使用時の最大プロセス数
  • pickle_safe: Trueならスレッドベースのプロセスを使います.実装がmultiprocessingに依存しているため,子プロセスに簡単に渡すことができないものとしてPickableでない引数をgeneratorに渡すべきではないことに注意してください.

返り値

予測値のNumpy配列.


get_layer

get_layer(self, name=None, index=None)

層のuniqueな名前、もしくはグラフでのインデックスに基づき層を返します。 インデックスはボトムアップの幅優先探索の順番に基づきます。

引数

  • name: 層の名前を表す文字列
  • index: 層のインデックスを表す整数

戻り値

層のインスタンス