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(inputs=a, outputs=b)

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

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

model = Model(inputs=[a1, a2], outputs=[b1, b3, b3])

Modelの詳しい解説は,Keras functional APIをご覧ください.

モデルの便利な属性

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

メソッド

compile

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

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

引数

  • optimizer: 文字列(optimizer名)またはoptimizerのオブジェクト.詳細はoptimizersを参照してください.
  • loss: 文字列(目的関数名)または目的関数.詳細はlossesを参照してくださいの出力を持つ場合は,オブジェクトの辞書かリストを渡すことで,各出力に異なる損失を用いることができます.
  • metrics: 訓練時とテスト時にモデルにより評価される評価関数のリスト.一般的にはmetrics=['accuracy']を使うことになります.マルチ出力モデルの各出力のための各評価関数を指定するために,metrics={'output_a': 'accuracy'}のような辞書を渡すこともできます.
  • loss_weights: 異なるモデルの出力における損失寄与度に重み付けをするためのスカラ係数(Pythonの浮動小数点数)を表すオプションのリスト,または辞書.
  • sample_weight_mode: タイムステップ毎にサンプルを重み付け(2次元の重み)する場合は,この値をtemporalに設定してください.Noneはデフォルト値で,サンプル毎の重み(1次元の重み)です.モデルが複数の出力をする時,modeの辞書かリストを渡すことで,各出力に異なるsample_weight_modeを使うことができます.
  • kwargs: バックエンドにTheanoを用いる時は,これら引数はK.functionに渡されます.Tensorflowバックエンドの場合は tf.Session.runに渡されます.

Raises

  • ValueError: optimizerlossmetrics,またはsample_weight_modeに対して無効な引数が与えられた場合.

fit

fit(self, x=None, y=None, batch_size=32, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0)

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

引数

  • x: 訓練データのNumpy 配列,もしくはモデルが複数の入力を持つ場合はNumpy 配列のリスト.モデル内のあらゆる入力に名前を当てられている場合,入力の名前とNumpy 配列をマップした辞書を渡すことも可能です.
  • y: 教師(targets)データのNumpy 配列,もしくはモデルが複数の出力を持つ場合はNumpy 配列のリスト.モデル内のあらゆる出力が名前を当てられている場合,出力の名前とNumpy 配列をマップした辞書を渡すことも可能です.
  • batch_size: 勾配更新毎のサンプル数を示す整数.
  • epochs: 訓練データ配列の反復回数を示す整数.
    • 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: 訓練データを各試行の前にシャッフルするかどうかを示す真理値.
  • class_weight: クラスのインデックスと重み(浮動小数点数)をマップするオプションの辞書で,訓練時に各クラスのサンプルに関するモデルの損失に適用します.これは過小評価されたクラスのサンプルに「より注意を向ける」ようモデルに指示するために有用です.
  • sample_weight: xと同じサイズのオプションの配列で,各サンプルに関してモデルの損失に割り当てる重みを含みます.時間データの場合に,(samples, sequence_length)の形式の2次元配列を渡すことができ,各サンプルの各タイムステップに異なる重みを割り当てられます.この場合,compile()内で,sample_weight_mode="temporal"と指定するようにします.
  • initial_epoch: 訓練を開始するエポック(前回の学習を再開するのに便利です).

戻り値

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

Raises

  • ValueError: 与えられた入力データとモデルが期待するものとが異なる場合.

evaluate

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

テストモードにおいて,モデルの損失値と評価値を返します.

その計算はバッチ処理で行われます.

引数

  • x: テストデータのNumpy 配列,もしくはモデルが複数の入力を持つ場合はNumpy 配列のリスト.モデル内のあらゆる入力が名前を当てられている場合,入力の名前とNumpy 配列をマップした辞書を渡すことも可能です.
  • y: 教師データのNumpy 配列,もしくはモデルが複数の出力を持つ場合はNumpy 配列のリスト.モデル内のあらゆる出力が名前を当てられている場合,出力の名前とNumpy 配列をマップした辞書を渡すことも可能です.
  • batch_size: 勾配更新毎のサンプル数を示す整数.
  • verbose: 冗長モードで,0または1.
  • sample_weight: 異なるサンプルが損失,または評価に寄与度を重み付けするための値の配列.

戻り値

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


predict

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

入力サンプルに対する予測の出力を生成します.

その計算はバッチ処理で行われます.

引数

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

戻り値

予測結果のNumpy 配列.

Raises

  • ValueError: 与えられた入力データとモデルが期待するものが異なる場合,またはステートフルなモデルがバッチサイズの倍数でないサンプル数を受け取った場合.

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: クラスのインデックスと重み(浮動小数点数)をマップするオプションの辞書で,訓練時に各クラスのサンプルに関するモデルの損失に適用します. これは過小評価されたクラスのサンプルに「より注意を向ける」ようモデルに指示するために有用です.

戻り値

学習の損失を表すスカラ値(モデルが単一の出力を持ち,かつ評価関数がない場合),またはスカラ値のリスト(モデルが複数の出力や評価関数を持つ場合).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)

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

引数

  • x: 入力データ,Numpy 配列.

戻り値

予測値を格納したNumpy 配列.


fit_generator

fit_generator(self, generator, steps_per_epoch, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_queue_size=10, workers=1, use_multiprocessing=False, initial_epoch=0)

Pythonジェネレータによりバッチ毎に生成されたデータでモデルを訓練します.

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

use_multiprocessing=Trueのときに,keras.utils.Sequenceを使うことで順序とエポックごとに全入力を1度だけ使用することを保証します.

引数

  • generator: ジェネレータかマルチプロセッシング時にデータの重複を防ぐためのSequence(keras.utils.Sequence)オブジェクトのインスタンス.本ジェネレータの出力は,以下のいずれかです.
    • (inputs, targets)のタプル.
    • (inputs, targets, sample_weights)のタプル.すべての配列は同じ数のサンプルを含む必要があります.本ジェネレータは無期限にそのデータをループさせるようになっています.steps_per_epoch数のサンプルがモデルに与えられると1度の試行が終了します.
  • steps_per_epoch: ある一つのエポックが終了し,次のエポックが始まる前にgeneratorから使用する総ステップ数(サンプルのバッチ数).もし,データサイズをバッチサイズで割った時,通常ユニークなサンプル数に等しくなります.
  • epochs: データの反復回数の合計を示す整数.
  • verbose: 冗長モードで,0,1,または2.
  • callbacks: 訓練時に呼ばれるコールバックのリスト.
  • validation_data: これは以下のいずれかです.
    • バリデーションデータ用のジェネレータ.
    • (inputs, targets)のタプル.
    • (inputs, targets, sample_weights)のタプル.
  • validation_steps: validation_dataがジェネレータの場合にのみ関係します.終了する前にgeneratorから使用する総ステップ数(サンプルのバッチ数).
  • class_weight: クラスインデックスと各クラスの重みをマップする辞書です.
  • max_queue_size: ジェネレータのキューの最大サイズです.
  • workers: スレッドベースのプロセス使用時の最大プロセス数.
  • use_multiprocessing: Trueならスレッドベースのプロセスを使います.実装がmultiprocessingに依存しているため,子プロセスに簡単に渡すことができないものとしてPickableでない引数をgeneratorに渡すべきではないことに注意してください.
  • initial_epoch: 学習を開始するエポック(前回の学習を再開するのに便利です).

戻り値

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'),
                    steps_per_epoch=10000, epochs=10)

Raises

  • ValueError: ジェネレータが無効なフォーマットのデータを使用した場合.

evaluate_generator

evaluate_generator(self, generator, steps, max_queue_size=10, workers=1, use_multiprocessing=False)

データジェネレータでモデルを評価します.

ジェネレータはtest_on_batchで受け取られたのと同じ種類のデータを返します.

引数:

  • generator: ジェネレータは(inputs, targets)タプルもしくは(inputs, targets, sample_weights)タプルかマルチプロセッシング時にデータの重複を防ぐためのSequence (keras.utils.Sequence) オブジェクトのインスタンスを使用します.
  • steps: 終了する前にgeneratorから使用する総ステップ数(サンプルのバッチ数).
  • max_queue_size: ジェネレータのキューのための最大サイズ.
  • workers: スレッドベースのプロセス使用時の最大プロセス数.
  • use_multiprocessing: Trueならスレッドベースのプロセスを使います.実装がmultiprocessingに依存しているため,子プロセスに簡単に渡すことができないものとしてPickableでない引数をgeneratorに渡すべきではないことに注意してください.

戻り値

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

Raises

  • ValueError: ジェネレータが無効なフォーマットのデータを使用した場合.

predict_generator

ジェネレータのデータに対して予測します.

ジェネレータは predict_on_batch が受け取るデータと同じ種類のデータを返します.

predict_generator(self, generator, steps, max_queue_size=10, workers=1, use_multiprocessing=False, verbose=0)

引数

  • generator: ジェネレータは入力サンプルのバッチ数を使用します.
  • steps: 終了する前にgeneratorから使用する総ステップ数(サンプルのバッチ数).
  • max_queue_size: ジェネレータのキューの最大サイズ.
  • workers: スレッドベースのプロセス使用時の最大プロセス数.
  • use_multiprocessing: Trueならスレッドベースのプロセスを使います.実装がmultiprocessingに依存しているため,子プロセスに簡単に渡すことができないものとしてPickableでない引数をgeneratorに渡すべきではないことに注意してください.
  • verbose: 冗長モードで,0または1.

戻り値

予測値のNumpy 配列.

Raises

  • ValueError: ジェネレータが無効なフォーマットのデータを使用した場合.

get_layer

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

レイヤーの(ユニークな)名前,またはインデックスに基づき層を返します.

インデックスはボトムアップの幅優先探索の順番に基づきます.

引数

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

戻り値

レイヤーのインスタンス.

Raises

  • ValueError: 無効なレイヤーの名前,またはインデックスの場合.