TensorFlow基礎

3 min

ニューラルネットワークの訓練を始めて2日目。

シンプルなニューラルネットワーク構築プロセス

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test,  y_test, verbose=2)

このシンプルなニューラルネットワークの構造を見てみましょう。

x_train, x_test = x_train / 255.0, x_test / 255.0はMNISTデータセットが0-255なので、正規化を行っています。

tf.keras.models.Sequentialは計算のコネクタで、このネットワークが以下のステップで接続され、順番に計算されることを意味します。

最初の層tf.keras.layers.Flattenは画像フォーマットを2D配列(28 x 28ピクセル)から1D配列(28 x 28 = 784ピクセル)に変換します。この層は学習するパラメータがなく、データを再フォーマットするだけです。

Dropoutは過学習を防ぐための正則化トリックです。各訓練時にランダムにいくつかのニューロンを無視します。

model.compileには3つのものが必要です:

  • 損失関数 - 訓練中のモデル精度を測定。この関数を最小化してモデルを正しい方向に「導く」。
  • オプティマイザ - データと損失関数に基づいてモデルがどのように更新されるかを決定。
  • メトリクス - 訓練とテストステップを監視。

回帰

ほとんどのプロセスは前と同じです。

過学習と過少学習

過学習を防ぐ最も簡単な方法は、小さなモデルから始めることです。学習可能なパラメータが少ないモデル(層の数と各層のユニット数で決まる)。

ハイパーパラメータ調整

Keras Tunerは、TensorFlowプログラムに最適なハイパーパラメータセットを選択するのに役立つライブラリです。

ファインチューニング

このチュートリアルでは、転移学習を使用して事前訓練済みネットワークで猫と犬の画像を分類する方法を学びます。

自分の問題に戻る

H5フォーマットを使用する必要があるので、まず自分でモデルを再作成する必要があります。

ソースコードを確認する限り、何も問題ではありません。

Fmodel.add(Dense(100, input_shape=(7,),activation='tanh',use_bias=True))
Fmodel.layers[0].set_weights([np.array(f['Weights']['Layer1']).T,np.array(f['Bias']['Layer1']).flatten()])

やっと解決しました。あとはファインチューニングをするだけです。