Pythonのkerasで機械学習を行っているのですが、グリッドサーチでパラメータを調整しているため、多重for文を構成してしまっております。なので、タイトルにもある警告文が発生してしまいます。調べたところ、for内で学習をさせてしまっていることで発生すると合ったのですが、自分がやりたいことの都合上、forループを削除できません。for文を介さずにパラメータサーチを行う方法があれば教えていただきたいです。
現状のソースの概要は以下の通りとなっております。
Python
1def NN(lr, epoch): 2 #学習に使用するデータのループ 3 for i in Sample: 4 #以下学習モデルの構築及び学習・評価 5 6 7 8if __name__ == "__main__": 9#予め作成した学習率及びエポック数のリストから値を選択 10 for lr in Param_lr: 11 for epoch in Param_epoch: 12 NN(lr, epoch)
上記のソースの通り、学習率及びエポック数に関してパラメータサーチを行い、更にNN()内で使用する学習データを決定するためのforループが存在します。パラメータサーチを行わない、Sampleのループを削除する以外での改善策を教えていただければ幸いです。
また、以下のコードで実行した際は警告文が出ませんでした。これは一体どうしてなのでしょうか?
Python
1import numpy as np 2import matplotlib.pyplot as plt 3from keras.models import Sequential 4from keras.layers import Dense 5 6 7x = np.linspace(-np.pi, np.pi).reshape(-1, 1) 8t = np.sin(x) 9def NN_test(): 10 for i in range(0, 5): 11 # ニューラルネットワークの設定 12 n_in = 1 # 入力層のニューロン数 13 n_mid = 20 # 中間層のニューロン数 14 n_out = 1 # 出力層のニューロン数 15 16 batch_size = 8 # バッチサイズ 17 18 # 入力層、中間層、出力層の3層のニューラルネットワークを構築 19 model = Sequential() 20 model.add(Dense(n_mid, input_shape=(n_in,), activation="sigmoid")) # 活性化関数にシグモイド関数 21 model.add(Dense(n_out, activation="linear")) # 活性化関数に恒等関数 22 model.compile(loss="mean_squared_error", optimizer="sgd") # 損失関数に二乗誤差、最適化アルゴリズムにSGDを使用してコンパイル 23 history = model.fit(x, t, batch_size=batch_size, epochs=10, validation_split=0.1) # 10%のデータを検証用に使う 24 25if __name__ == "__main__": 26 NN_test() 27
あなたの回答
tips
プレビュー