「とにかくコピペだけでサクッと動かせるニューラルネットワークのコードが欲しい」というときがあるのだけど、検索してもなかなか出てきません。そこで、とにかくコピペだけ試せる最小コードを作りました。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スクラッチパッドが便利ですよ。