前提・実現したいこと
kerasを用いて4変量の時系列データをLSTMで4つに分類しようとしていますが、
レイヤーを積み上げた後、model.fitの段階でエラーが出てしまいます。
用いているデータは為替価格の時系列データで、
学習データXは[89711(サンプル数), 4(変量の数), 36(ルックバック数)]の次元で作成し、
ターゲットYは[89771(サンプル数), 4(分類したい数、one-hotベクトル化)]の次元で作成しました。
勉強不足による初歩的な失敗なのではないかと感じてはいるのですが、
自分の情報収集能力では解決の糸口がつかめておりません。
追加で必要な情報などありましたら是非コメントを宜しくお願いします。
発生している問題・エラーメッセージ
もともと出ていたエラー ValueError Traceback (most recent call last) <ipython-input-66-94ca9aad4ee1> in <module> ----> 1 history = model.fit(X_train, Y_train, batch_size = batch_size, epochs = epochs) ~略~ D:\Anaconda3\envs\tensorflow-gpu-2\lib\site-packages\tensorflow\python\keras\engine\training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix) 321 ': expected ' + names[i] + ' to have ' + 322 str(len(shape)) + ' dimensions, but got array ' --> 323 'with shape ' + str(data_shape)) 324 if not check_batch_axis: 325 data_shape = data_shape[1:] ValueError: Error when checking target: expected activation_5 to have 3 dimensions, but got array with shape (80739, 4)
input_shape=(None, X_train.shape[1], X_train.shape[2]) と、書き換えた場合のエラー --------------------------------------------------------------------------- InvalidArgumentError Traceback (most recent call last) D:\Anaconda3\envs\tensorflow-gpu-2\lib\site-packages\tensorflow\python\framework\ops.py in set_shape(self, shape) 557 dim_list, --> 558 unknown_shape) 559 except errors.InvalidArgumentError as e: InvalidArgumentError: Shapes must be equal rank, but are 3 and 2 During handling of the above exception, another exception occurred: ~略~ D:\Anaconda3\envs\tensorflow-gpu-2\lib\site-packages\tensorflow\python\framework\ops.py in set_shape(self, shape) 559 except errors.InvalidArgumentError as e: 560 # Convert to ValueError for backwards compatibility. --> 561 raise ValueError(str(e)) 562 563 @property ValueError: Shapes must be equal rank, but are 3 and 2
該当のソースコード
python3
1from tensorflow import keras 2from tensorflow.keras.models import Sequential 3from tensorflow.keras.layers import LSTM 4from tensorflow.keras.layers import Activation, Dense, Dropout, Flatten 5from tensorflow.keras.layers import Conv2D, MaxPooling2D 6from tensorflow.keras import backend as K 7from tensorflow.keras.initializers import he_normal 8from tensorflow.keras.optimizers import Adam 9 10# -略- 11 12#[X.shape, Y.shape] = [(89711, 4, 36), (89711, 4)] 13 14input_dim = num_sihyou*data_ago 15output_dim = 4 16num_hidden_units = 128 # 隠れ層のユニット数 17batch_size = 300 # ミニバッチサイズ 18epochs = 100 # 学習エポック数 19learning_rate = 0.001 # 学習率 20 21# モデルの作成 22model = Sequential() 23model.add(LSTM( 24 num_hidden_units, 25 input_shape=(X_train.shape[1], X_train.shape[2]), 26 return_sequences=True)) 27model.add(Dropout(0.2)) 28model.add(Dense(output_dim)) # 分類の数 29model.add(Activation("softmax")) 30model.compile(loss="categorical_crossentropy", optimizer="Adam") 31model.summary() 32history = model.fit(X_train, Y_train, batch_size = batch_size, epochs = epochs)
試したこと
多変量LSTMについての解説がwebでなかなか見つけ出せず、
試行錯誤すらできていません。
いただいた回答やコメントをもとに試したことは以下です
・jupyter notebookカーネルの再起動
->エラー内容に変化なし
・input_shape=(None, X_train.shape[1], X_train.shape[2]) と、書き換え
->モデルのレイヤー積み上げ段階でエラーが出るようになりました。
エラー内容を追記いたします。
補足情報(FW/ツールのバージョンなど)
Windows10
python = 3.6.10
tensorflow-gpu = 1.12.0
エディタ:jupyter notebook
回答1件
あなたの回答
tips
プレビュー