Keras-models

提供:Dev Guides
移動先:案内検索

Keras-モデル

前に学習したように、Kerasモデルは実際のニューラルネットワークモデルを表します。 Kerasは、モデルを作成するための2つのモード、シンプルで使いやすい_Sequential API_、およびより柔軟で高度な_Functional API_を提供します。 この章では、Sequential APIと_Functional_ APIの両方を使用してモデルを作成する方法を学びましょう。

シーケンシャル

*_Sequential API_* の中核となる考え方は、Kerasレイヤーを順番に並べるだけなので、_Sequential API_と呼ばれます。 ほとんどのANNには、順番にレイヤーがあり、データが最終的に出力レイヤーに到達するまで、指定された順序でデータが1つのレイヤーから別のレイヤーに流れます。

ANNモデルは、以下に指定されているように* Sequential()* APIを呼び出すだけで作成できます-

from keras.models import Sequential
model = Sequential()

レイヤーを追加する

レイヤーを追加するには、KerasレイヤーAPIを使用してレイヤーを作成し、以下に指定されているようにadd()関数でレイヤーを渡します-

from keras.models import Sequential

model = Sequential()
input_layer = Dense(32, input_shape=(8,)) model.add(input_layer)
hidden_layer = Dense(64, activation='relu'); model.add(hidden_layer)
output_layer = Dense(8)
model.add(output_layer)

ここでは、1つの入力レイヤー、1つの非表示レイヤー、1つの出力レイヤーを作成しました。

モデルにアクセスする

Kerasは、レイヤー、入力データ、出力データなどのモデル情報を取得するいくつかのメソッドを提供します。 彼らは次のとおりです-

  • model.layers -モデルのすべてのレイヤーをリストとして返します。
>>> layers = model.layers
>>> layers
[
   <keras.layers.core.Dense object at 0x000002C8C888B8D0>,
   <keras.layers.core.Dense object at 0x000002C8C888B7B8>
   <keras.layers.core.Dense object at 0x 000002C8C888B898>
]
  • model.inputs -モデルのすべての入力テンソルをリストとして返します。
>>> inputs = model.inputs
>>> inputs
[<tf.Tensor 'dense_13_input:0' shape=(?, 8) dtype=float32>]
  • model.outputs -モデルのすべての出力テンソルをリストとして返します。
>>> outputs = model.outputs
>>> outputs
<tf.Tensor 'dense_15/BiasAdd:0' shape=(?, 8) dtype=float32>]
  • model.get_weights -すべての重みをNumPy配列として返します。
  • model.set_weights(weight_numpy_array) -モデルの重みを設定します。

モデルをシリアル化する

Kerasは、モデルをオブジェクトとjsonにシリアル化し、後で再度ロードするメソッドを提供します。 彼らは次のとおりです-

  • get_config() -Iモデルをオブジェクトとして返します。
config = model.get_config()
  • from_config() -モデル構成オブジェクトを引数として受け入れ、それに応じてモデルを作成します。
new_model = Sequential.from_config(config)
  • to_json() -モデルをjsonオブジェクトとして返します。
>>> json_string = model.to_json()
>>> json_string '{"class_name": "Sequential", "config":
{"name": "sequential_10", "layers":
[{"class_name": "Dense", "config":
{"name": "dense_13", "trainable": true, "batch_input_shape":
[null, 8], "dtype": "float32", "units": 32, "activation": "linear",
"use_bias": true, "kernel_initializer":
{"class_name": "Vari anceScaling", "config":
{"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}},
"bias_initializer": {"class_name": "Zeros", "conf
ig": {}}, "kernel_regularizer": null, "bias_regularizer": null,
"activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}},
{" class_name": "Dense", "config": {"name": "dense_14", "trainable": true,
"dtype": "float32", "units": 64, "activation": "relu", "use_bias": true,
"kern el_initializer": {"class_name": "VarianceScaling", "config":
{"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}},
"bias_initia lizer": {"class_name": "Zeros",
"config": {}}, "kernel_regularizer": null, "bias_regularizer": null,
"activity_regularizer": null, "kernel_constraint" : null, "bias_constraint": null}},
{"class_name": "Dense", "config": {"name": "dense_15", "trainable": true,
"dtype": "float32", "units": 8, "activation": "linear", "use_bias": true,
"kernel_initializer": {"class_name": "VarianceScaling", "config":
{"scale": 1.0, "mode": "fan_avg", "distribution": " uniform", "seed": null}},
"bias_initializer": {"class_name": "Zeros", "config": {}},
"kernel_regularizer": null, "bias_regularizer": null, "activity_r egularizer":
null, "kernel_constraint": null, "bias_constraint":
null}}]}, "keras_version": "2.2.5", "backend": "tensorflow"}'
>>>
  • model_from_json() -モデルのjson表現を受け入れ、新しいモデルを作成します。
from keras.models import model_from_json
new_model = model_from_json(json_string)
  • to_yaml() -モデルをyaml文字列として返します。
>>> yaml_string = model.to_yaml()
>>> yaml_string 'backend: tensorflow\nclass_name:
Sequential\nconfig:\n layers:\n - class_name: Dense\n config:\n
activation: linear\n activity_regular izer: null\n batch_input_shape:
!!python/tuple\n - null\n - 8\n bias_constraint: null\n bias_initializer:\n
class_name : Zeros\n config: {}\n bias_regularizer: null\n dtype:
float32\n kernel_constraint: null\n
kernel_initializer:\n cla ss_name: VarianceScaling\n config:\n
distribution: uniform\n mode: fan_avg\n
scale: 1.0\n seed: null\n kernel_regularizer: null\n name: dense_13\n
trainable: true\n units: 32\n
use_bias: true\n - class_name: Dense\n config:\n activation: relu\n activity_regularizer: null\n
bias_constraint: null\n bias_initializer:\n class_name: Zeros\n
config : {}\n bias_regularizer: null\n dtype: float32\n
kernel_constraint: null\n kernel_initializer:\n class_name: VarianceScalin g\n
config:\n distribution: uniform\n mode: fan_avg\n scale: 1.0\n
seed: null\n kernel_regularizer: nu ll\n name: dense_14\n trainable: true\n
units: 64\n use_bias: true\n - class_name: Dense\n config:\n
activation: linear\n activity_regularizer: null\n
bias_constraint: null\n bias_initializer:\n
class_name: Zeros\n config: {}\n bias_regu larizer: null\n
dtype: float32\n kernel_constraint: null\n
kernel_initializer:\n class_name: VarianceScaling\n config:\n
distribution: uniform\n mode: fan_avg\n
scale: 1.0\n seed: null\n kernel_regularizer: null\n name: dense _15\n
trainable: true\n units: 8\n
use_bias: true\n name: sequential_10\nkeras_version: 2.2.5\n'
>>>
  • model_from_yaml() -モデルのyaml表現を受け入れ、新しいモデルを作成します。
from keras.models import model_from_yaml
new_model = model_from_yaml(yaml_string)

モデルを要約する

モデルを理解することは、トレーニングや予測の目的でモデルを適切に使用するために非常に重要なフェーズです。 Kerasは、モデルとそのレイヤーに関する完全な情報を取得するための簡単な方法、要約を提供します。

前のセクションで作成されたモデルの要約は次のとおりです-

>>> model.summary() Model: "sequential_10"
_________________________________________________________________
Layer (type) Output Shape Param
#================================================================
dense_13 (Dense) (None, 32) 288
_________________________________________________________________
dense_14 (Dense) (None, 64) 2112
_________________________________________________________________
dense_15 (Dense) (None, 8) 520
=================================================================
Total params: 2,920
Trainable params: 2,920
Non-trainable params: 0
_________________________________________________________________
>>>

モデルのトレーニングと予測

モデルは、トレーニング、評価、予測プロセスの機能を提供します。 彼らは次のとおりです-

  • compile -モデルの学習プロセスを構成する
  • fit -トレーニングデータを使用してモデルをトレーニングする
  • evaluate -テストデータを使用してモデルを評価する
  • predict -新しい入力の結果を予測します。

機能的なAPI

シーケンシャルAPIは、レイヤーごとにモデルを作成するために使用されます。 関数型APIは、より複雑なモデルを作成するための代替アプローチです。 機能モデルでは、レイヤーを共有する複数の入力または出力を定義できます。 まず、モデルのインスタンスを作成し、レイヤーに接続して、モデルへの入力と出力にアクセスします。 このセクションでは、機能モデルについて簡単に説明します。

モデルを作成する

以下のモジュールを使用して入力レイヤーをインポートします-

>>> from keras.layers import Input

ここで、以下のコードを使用して、モデルの入力次元形状を指定する入力レイヤーを作成します-

>>> data = Input(shape=(2,3))

以下のモジュールを使用して入力の層を定義します-

>>> from keras.layers import Dense

以下のコード行を使用して、入力に高密度レイヤーを追加します-

>>> layer = Dense(2)(data)
>>> print(layer)
Tensor("dense_1/add:0", shape =(?, 2, 2), dtype = float32)

以下のモジュールを使用してモデルを定義します-

from keras.models import Model

入力層と出力層の両方を指定して、機能的な方法でモデルを作成します-

model = Model(inputs = data, outputs = layer)

単純なモデルを作成するための完全なコードを以下に示します-

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

data = Input(shape=(2,3))
layer = Dense(2)(data) model =
Model(inputs=data,outputs=layer) model.summary()
_________________________________________________________________
Layer (type)               Output Shape               Param #
=================================================================
input_2 (InputLayer)       (None, 2, 3)               0
_________________________________________________________________
dense_2 (Dense)            (None, 2, 2)               8
=================================================================
Total params: 8
Trainable params: 8
Non-trainable params: 0
_________________________________________________________________