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で学習させています。各行に詳細なコメントを付け加え、処理の流れが分かりやすくなっています。