ハンズオン(SGDサンプルコード)

SGDのサンプルコード

Python(TensorFlow/Keras)


import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import SGD

# データの準備(MNISTデータセットを読み込む)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# ピクセル値を0-1の範囲に正規化
x_train, x_test = x_train / 255.0, x_test / 255.0

# モデルの構築(全結合ニューラルネットワーク)
model = Sequential([
    Dense(128, activation='relu', input_shape=(784,)),  # 隠れ層:128ニューロン, 活性化関数ReLU
    Dense(10, activation='softmax')  # 出力層:10ニューロン(0-9の手書き数字分類), 活性化関数Softmax
])

# SGDオプティマイザーの設定(学習率0.01, モメンタム0.9)
optimizer = SGD(learning_rate=0.01, momentum=0.9)

# モデルのコンパイル
model.compile(
    optimizer=optimizer,  # 最適化手法にSGDを指定
    loss='sparse_categorical_crossentropy',  # 損失関数(分類問題用)
    metrics=['accuracy']  # 評価指標として精度(accuracy)を使用
)

# モデルの学習(トレーニング)
model.fit(
    x_train.reshape(-1, 784),  # 画像データを1次元配列に変換
    y_train,  # ラベルデータ
    epochs=10,  # 学習エポック数
    batch_size=32,  # バッチサイズ(ミニバッチSGD)
    validation_data=(x_test.reshape(-1, 784), y_test)  # 検証用データ
)

このコードでは、MNISTデータセットを使用して、手書き数字認識のニューラルネットワークをSGDで学習させています。各行に詳細なコメントを付け加え、処理の流れが分かりやすくなっています。