Pytorch CNN 模型:尺寸超出范围错误

Pytorch CNN Model: Dimension out of range Error

当我使用交叉熵损失我的 CNN 模型时,我不断收到此错误“IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)”。

我的图层是这样的:

    x= self.conv1(x)
    x= F.relu(x)
    x= self.pool1(x)
    x= F.relu(x)
    x= self.conv3(x)
    x= F.relu(x)
    x= self.conv4(x)
    x= F.relu(x)
    
    x= self.pool2(x)

    x = torch.flatten(x, 1)
    
    x= self.lin1(x)
    x= F.relu(x)
    x= self.lin2(x)
    x= F.relu(x)
    x= self.lin3(x)
    x= F.relu(x)
    x= self.sftmax(x)
    

我的训练代码和 [Pytorch 网站上的代码差不多]。

其中 x_train 的形状为 (300, 1000),y_train 有 300 个标签。我想在 x_train 中一次输入一个数组,然后根据 y_train.

中对应的标签进行优化

当我训练时,outputs= net(Input) 没有错误。对于第一个纪元,我得到类似 tensor([[[0.1072, 0.2725, 0.2963, 0.2395, 0.3821]]], dtype=torch.float64, grad_fn=<UnsqueezeBackward0>) 的输出。然后我传入Label,也就是tensor([5.], dtype=torch.float64).

虽然在第一个纪元之后,我收到错误“IndexError:维度超出范围(预期在 [-1, 0] 范围内,但得到 1)”。这与输入和输出的形状有关吗?我不确定哪里出了问题。

如有任何建议,我们将不胜感激!

我认为问题可能是由于您在将输出传递给损失函数之前使用了 squeeze(0)。

在下面的文档中注意它说输出张量和输入传感器将共享相同的内存space。

https://pytorch.org/docs/stable/generated/torch.squeeze.html

编辑

使用示例附带的协作进行测试后。似乎并非如此。尽管我注意到您的标签张量大小为 1。而该示例具有与输出大小匹配的标签数组 space.

我相信您可能会从训练集中提取单个值而不是预期的张量大小?本质上输出应该在大小上与训练集输出相匹配,这样它就可以计算出两者之间的损失。