2025/05/18

特徴量を正規化し、学習率を徐々に減少させる方法

 層毎のユニット数調整では顕著な変化は見られなかったので新たな試みとして

  • 特徴量の正規化
  • 学習率の調整

をCopilotの助言を元に施してみました。

  1. from tensorflow.keras.layers import Activation, BatchNormalization
  2.  
  3. x = Dense(256)(merged_features)
  4. x = BatchNormalization()(x)
  5. x = Activation('relu')(x)
  6. x = Dropout(0.3)(x)
  7.  
  8. x = Dense(128)(x)
  9. x = BatchNormalization()(x)
  10. x = Activation('relu')(x)
  11. x = Dropout(0.3)(x)
  12.  
  13. x = Dense(64)(x)
  14. x = BatchNormalization()(x)
  15. x = Activation('relu')(x)
  16.  
  17. uma_networks.append(x)

これが特徴量の正規化追加した部分で

  1. from tensorflow.keras.optimizers import Adam
  2.  
  3. # 学習率を指定
  4. initial_learning_rate = 0.001
  5. lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
  6. initial_learning_rate, decay_steps=10000, decay_rate=0.9, staircase=True)
  7.  
  8. optimizer = Adam(learning_rate=lr_schedule)
  9.  
  10. # モデルをコンパイル
  11. model.compile(optimizer=optimizer, loss='mse', metrics=['mae', root_mean_squared_error])

これがExponentialDecayを利用して

  • decay_steps=10000: 1 万ステップごとに減衰
  • decay_rate=0.9: 10% ずつ減衰
  • staircase=True: 段階的に学習率を減らす

としているらしい。50epochsで既に開始して、今までだとRMSE 38辺りが限界値的に得られた程度だったんですが、7epoch辺りで到達してここから更に良くなるかが気になる所です。まあ、CopilotにはDropout(0.3)はちょっと大きいのでDropout(0.2)にしてみてはってアドバイスも頂いてるので、それも試そうとは思ってます。

0 件のコメント:

コメントを投稿