LSTMを用いた回帰モデル実装における0D or 1D target tensor expected, multi-target not supportedというエラーについて
解決したいこと
LSTMを用いて株価予測するモデルを作りたいと思っています。
実装中に下記のエラーが発生し、解決方法がわからなかったため教えていただけますと幸いです。
初心者のため、回答するために不足している情報等がありましたらご指示ください!
発生している問題・エラー
RuntimeError: 0D or 1D target tensor expected, multi-target not supported
該当するソースコード
class Net(pl.LightningModule):
def __init__(self):
super().__init__()
self.lstm = nn.LSTM(7,10)
self.fc = nn.Linear(10,1)
def forward(self, x):
x =x.contiguous().view(x.size(1), x.size(0), 7)
out, (h_n, c_n) = self.lstm(x)
h = h_n.contiguous().view(h_n.size(1), -1)
h = self.fc(h)
return h
def training_step(self, batch, batch_idx):
x, t = batch
y = self(x)
t = t.squeeze_()
loss = F.cross_entropy(y, t)
self.log('train_loss', loss, on_step=True, on_epoch=True, prog_bar=True)
self.log('train_acc', accuracy(y.softmax(dim=1), t), on_step=True, on_epoch=True, prog_bar=True)
return loss
def validation_step(self, batch, batch_idx):
x, t = batch
y = self(x)
t = t.squeeze_()
loss = F.cross_entropy(y, t)
self.log('val_loss', loss, on_step=False, on_epoch=True)
self.log('val_acc', accuracy(y.softmax(dim=1), t), on_step=False, on_epoch=True)
return loss
def test_step(self, batch, batch_idx):
x, t = batch
y = self(x)
t = t.squeeze_()
loss = F.cross_entropy(y, t)
self.log('test_loss', loss, on_step=False, on_epoch=True)
self.log('test_acc', accuracy(y.softmax(dim=1), t), on_step=False, on_epoch=True)
return loss
def configure_optimizers(self):
optimizer = torch.optim.SGD(self.parameters(),lr=0.01)
return optimizer
自分で試したこと
しっかりと理解はしていないのですが、似たような事例の解決方法かとおもって下記のURL記載の方法を行いましたが解決できませんでした。
https://stackoverflow.com/questions/49206550/pytorch-error-multi-target-not-supported-in-crossentropyloss/49209628
具体的には、
loss = F.cross_entropy(y, t)
ここの実行前に
t = t.squeeze_()
を入力しました。
(正直理屈がわかっていないのですが、このコードも不要なんでしょうか?)