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.
我相信您可能会从训练集中提取单个值而不是预期的张量大小?本质上输出应该在大小上与训练集输出相匹配,这样它就可以计算出两者之间的损失。
当我使用交叉熵损失我的 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.
我相信您可能会从训练集中提取单个值而不是预期的张量大小?本质上输出应该在大小上与训练集输出相匹配,这样它就可以计算出两者之间的损失。