いっしきまさひこBLOG

AI・機械学習関連、Web制作関連、プログラミング関連、旅行記録などなど。一色政彦。

サクッと試せるTensorFlow/Kerasニューラルネットワークの最小コード(Minimal Code)

「とにかくコピペだけでサクッと動かせるニューラルネットワークのコードが欲しい」というときがあるのだけど、検索してもなかなか出てきません。そこで、とにかくコピペだけ試せる最小コードを作りました。TensorFlow/Keras版です。

# ライブラリのインポート
import tensorflow as tf
import tensorflow.keras.backend as K

# 入力データ
NUMBER_OF_DATA  = 64
INPUT_FEATURES  = 1000
HIDDEN_FEATURES = 100
OUTPUT_FEATURES = 10
x = tf.random.normal([NUMBER_OF_DATA, INPUT_FEATURES])
y = tf.random.normal([NUMBER_OF_DATA, OUTPUT_FEATURES])
#x.shape # TensorShape([64, 1000])
#y.shape # TensorShape([64, 10])

# モデルの定義
model = tf.keras.models.Sequential([
  tf.keras.layers.Dense(input_shape=(INPUT_FEATURES,), units=HIDDEN_FEATURES),
  tf.keras.layers.ReLU(),
  tf.keras.layers.Dense(OUTPUT_FEATURES)
])
#model.summary()

# ★選択肢1★ トレーニング(簡易版)
LEARNING_RATE = 0.03   # 学習率: 0.03
EPOCHS = 100           # エポック数: 100
LOSS = 'mean_squared_error'

model.compile(
  optimizer=tf.keras.optimizers.SGD(learning_rate=LEARNING_RATE), 
  loss=LOSS,
  metrics=['accuracy'])
model.fit(x, y, epochs=EPOCHS)

print('Finished Training')
#print(model.get_weights())

# # ★選択肢2★ トレーニング(カスタマイズ版)
# LEARNING_RATE = 0.03   # 学習率: 0.03
# EPOCHS = 100           # エポック数: 100
#
# criterion = tf.keras.losses.MeanSquaredError()
#
# optimizer = tf.keras.optimizers.SGD(
#   learning_rate=LEARNING_RATE)
#
# def train_step(train_X, train_y):
#   training = True
#   K.set_learning_phase(training)  # tf.keras内部にも伝える
#   with tf.GradientTape() as tape:
#     pred_y = model(train_X, training=training)
#     loss = criterion(pred_y, train_y)
#   gradient = tape.gradient(loss, model.trainable_weights)
#   optimizer.apply_gradients(zip(gradient, model.trainable_weights))
#   return loss.numpy()
#
# for i in range(EPOCHS):
#     loss_result = train_step(x, y)
#     print(i, ':', loss_result)
#
# print('Finished Training')
# #print(model.get_weights())

ちなみに試すときは、Colabスクラッチパッドが便利ですよ。