前提・実現したいこと
LSTMで予測を行なっているのですが、学習時に以下のようなエラーが発生しています。
調べてみたところ、python特有のグローバル変数とローカル変数の扱い方が出てくるのですが、今回の'batch_index'に関してはコードに記述していません。
わかる方がいましたらコメントお願いします。
発生している問題・エラーメッセージ
Epoch 1/100 Traceback (most recent call last): File "forcast_snowcover_new.py", line 129, in <module> validation_data=(data4, target4) File "/Users/.local/share/virtualenvs/shuron-TfWa52ME/lib/python3.6/site-packages/keras/engine/training.py", line 1239, in fit validation_freq=validation_freq) File "/Users/.local/share/virtualenvs/shuron-TfWa52ME/lib/python3.6/site-packages/keras/engine/training_arrays.py", line 205, in fit_loop if batch_index == len(batches) - 1: # Last batch. UnboundLocalError: local variable 'batch_index' referenced before assignment
該当のソースコード
from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.layers.recurrent import LSTM from keras.optimizers import Adam from keras.callbacks import EarlyStopping from sklearn.model_selection import train_test_split import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.preprocessing import MinMaxScaler # CSVファイルの読み込み df1 = pd.read_csv('../split_data_2014_2015.csv') //省略 # 欠損値の穴埋め df1 = df1.fillna(method='ffill') df1 = df1["A"] # データの標準化 scaler = MinMaxScaler() df1 = np.array(scaler.fit_transform(np.array(df1).reshape(-1, 1))).reshape(1, -1) # データの生成 data1 = [] target1 = [] # 過去遡る日数 max_len = 15 # 将来予測する日数 future = 1 # 入力データは一列 n_in = 1 # 出力データは予測値一つ n_out = 1 # LSTMでのデータ構造に変更 for i in range(len(df1) - max_len): data1.append(df1[i:i + max_len]) target1.append(df1[i + max_len]) # LSTMで使用する形に整形 data1 = np.array(data1).reshape(len(data1), max_len, n_in) target1 = np.array(target1).reshape(len(target1), n_out) # 隠れ層 n_hidden = 100 length_of_sequence = 15 in_out_neurons = 1 epoch = 100 # モデルの設定 model = Sequential() model.add( LSTM( n_hidden, batch_input_shape=(None, length_of_sequence, in_out_neurons), return_sequences=False ) ) model.add(Dense(in_out_neurons)) model.add(Activation("linear")) optimizer = Adam(lr=0.001) model.compile(loss="mean_squared_error", optimizer=optimizer) # 学習 early_stopping = EarlyStopping(monitor='val_loss', mode='auto', patience=10) history = model.fit( data1, target1, batch_size=32, epochs=epoch, validation_data=(data4, target4) ) # 予測 test_predict = model.predict(data5) print(model.evaluate(data5, target5)) plt.figure() plt.plot( range(length_of_sequence, len(test_predict) + length_of_sequence), test_predict, color="r", label="predict_data" ) plt.plot(range(0, len(target5)), target5, color="b", label="row_data") plt.legend() plt.show()
あなたの回答
tips
プレビュー