前提・実現したいこと
pytorchにてLSTMを使って、時系列データの予測をしたいのですが、
RuntimeErrorが発生しました。
解決方法がわからず困っておりますので、教えていただきたいです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
RuntimeError: Expected hidden[0] size (1, 17938, 50), got [2, 1, 50]
該当のソースコード
python
1class LSTM(nn.Module): 2 3 #クラスのインスタンス化(はじめにLSTMクラスが実行されたときのみ実行される) 4 def __init__(self, input_size =2, hidden_size =50, output_size = 1 ): 5 super().__init__() 6 7 #隠れ層のサイズ 8 self.hidden_size = hidden_size 9 10 #input_size → hidden_sizeに変換 11 self.lstm = nn.LSTM(input_size, hidden_size) 12 13 #hidden_size → output_sizeに変換 lstmの出力に全結合レイヤーを介す 14 self.fc = nn.Linear(hidden_size, output_size) 15 16 #0で隠れ層を初期化する、hidden層の初期化とcell層の初期化 17 self.hidden = (torch.zeros(2,1,hidden_size),torch.zeros(2,1,hidden_size)) 18 19 20 #予測に用いる関数(順伝播) 21 def forward(self, x): 22 #データと隠れ層の状態が返ってくる 23 lstm_out , self.hidden = self.lstm(x, self.hidden) 24 #全結合層、順伝播させるのはデータが格納されているlstm_outのみ 25 pred = self.fc(lstm_out) 26 27 return pred[-1] #-1を指定することで一番最後の値を取り出すことができる 28 29 30print() 31print('***LSTMの定義終了***') 32print() 33 34 35 36 37 38''' ******************関数の定義・インスタンス化****************** ''' 39 40#モデルのインスタンス化と損失関数、最適化関数を定義する 41torch.manual_seed(3) #乱数の値を一定にし、処理結果を同じにする 42model = LSTM() #インスタンス 43 44#param = model.parameters() 45#print(param) 46 47#モデルの中身の確認 48#for k,v in model.state_dict().items(): 49# print(k) 50# print(v) 51 52 53criterion = nn.MSELoss() #損失関数 54optimizer = torch.optim.SGD(model.parameters(),lr=0.01) #最適化関数 55 56 57print() 58print('********************関数の定義・インスタンス化終了********************') 59print() 60 61 62 63 64''' ******************ここから学習****************** ''' 65 66model.train() #学習モード 67 68epochs = 10 #epochを定義 69loss_list_train = [] #損失を格納する配列を用意 70 71 72print(x_train) 73 74 75#epochごとに重みを更新 76for epoch in range(epochs): 77 78 #順伝播 ***LSTMモデルに入力データを引数で渡して、戻り値で順伝播後の予測値が返ってくる 79 rsoc_pred_train = model(x_train) 80 #★ここでエラーが発生 81
データのかたち
x_train.shape = torch.Size([60, 17938, 2])
補足情報(FW/ツールのバージョンなど)
pytorchを使用
あなたの回答
tips
プレビュー