前提・実現したいこと
機械学習初学者です。多変量LSTMに取り組んでいます。ga
Kerasでデータを3次元にする箇所がうまくいきません。
[サンプル数, ルックバック数, 変数数]の3つを作らなければいけないことは調べてわかったのですが、
実際にやってみるとうまくいきませんでした。
アドバイスよろしくお願いします。
(ヒントを出していただいてもおそらくすぐに理解できないので、先に「こうすれば動くよ」というのを教えていただけるとありがたいです。googleでヒントを得ようと思ったのですが、結局理解できませんでした。)
(やりたいことはclose_values volume_valuesの2つの値を使って学習させ、close_valuesの未来の値を予測させることです。)
発生している問題・エラーメッセージ
InvalidArgumentError: Incompatible shapes: [200,1] vs. [200,20,2] [[node gradient_tape/mean_squared_error/BroadcastGradientArgs (defined at <ipython-input-32-aa90cd783a2f>:21) ]] [Op:__inference_train_function_34315] Function call stack: train_function
該当のソースコード
python3
1 2 3#データの正規化 4#close_values volume_values 5from sklearn.preprocessing import MinMaxScaler 6mms = MinMaxScaler() 7 8#正規化された配列 9scaler = mms.fit(close_values) 10scaler2 = mms.fit(volume_values) 11 12close_values_norm = scaler.transform(close_values) 13volume_values_norm = scaler2.transform(volume_values) 14 15#----------------------------------@ 16import more_itertools 17#more_itertools.windowed = 数値をずらす関数 (ずらしたいもの,数値) 18# [サンプル数, ルックバック数, 変数数]の3つを作る 19 20#3次元配列を作る 21lookback = 20 22close_v = np.array(list(more_itertools.windowed(close_values_norm[:-20],lookback))) 23volume_v = np.array(list(more_itertools.windowed(volume_values_norm[:-20],lookback))) 24 25close_tt = np.array(list(more_itertools.windowed(close_values_norm[lookback:],lookback))) 26volume_tt = np.array(list(more_itertools.windowed(volume_values_norm[lookback:],lookback))) 27 28#close_tt = np.array(close_values_norm[lookback:]) 29#volume_tt = np.array(volume_values_norm[lookback:]) 30 31#データの結合 32x_train = np.concatenate([close_v,volume_v], axis=2) 33y_train = np.concatenate([close_tt,volume_tt], axis=2) 34 35 36#-------------------------------------@ 37#学習を開始する 38##学習の設定 39from keras.models import Sequential 40from keras.layers.core import Dense,Activation 41from keras.layers.recurrent import LSTM 42 43model = Sequential() 44model.add(LSTM(300)) 45model.add(Dense(1,input_shape = (3, ))) 46model.add(Activation('linear')) 47model.compile(loss="mean_squared_error",optimizer="adam") 48#print(x_train) 49#print(y_train) 50 51 52#early_stopping 53from keras.callbacks import EarlyStopping 54early_stopping = EarlyStopping(monitor="val_loss",mode="auto",patience=0) 55model.fit(x_train, y_train, batch_size=200, epochs=10, validation_split=0.2, callbacks=[early_stopping]) 56 57 58
試したこと
2日間調べましたが、結局わかりませんでした・・・
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/29 12:23