尺寸超出范围(预计在 [-1, 0] 范围内,但得到 1)(pytorch)
Posted
技术标签:
【中文标题】尺寸超出范围(预计在 [-1, 0] 范围内,但得到 1)(pytorch)【英文标题】:Dimension out of range (expected to be in range of [-1, 0], but got 1) (pytorch) 【发布时间】:2021-08-26 18:51:59 【问题描述】:我有一个非常简单的前馈神经网络(pytorch)
import torch
import torch.nn.functional as F
import numpy as np
class Net_1(nn.Module):
def __init__(self):
super(Net_1, self).__init__()
self.fc1 = nn.Linear(5*5, 64)
self.fc2 = nn.Linear(64, 32)
self.fc3 = nn.Linear(32, 3)
def forward(self,x):
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return F.log_softmax(x, dim=1)
net = Net_1()
输入是这个 5x5 numpy 数组
state = [[0, 0, 3, 0, 0],
[0, 0, 0, 0, 0],
[0, 2, 1, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
state = torch.Tensor(state).view(-1)
net(state) 抛出以下错误
Dimension out of range (expected to be in range of [-1, 0], but got 1)
问题在于何时应用 F.log_softmax()
【问题讨论】:
【参考方案1】:当您调用return F.log_softmax(x, dim=1)
时,x 是形状为torch.Size([3])
的一维张量。
pytorch 中的维度索引从 0 开始,因此您不能将 dim=1
用于一维张量,您需要使用 dim=0
。
将return F.log_softmax(x, dim=1)
替换为return F.log_softmax(x, dim=0)
,就可以了。
将来您可以通过向前添加 print(x.shape) 来检查张量大小。
【讨论】:
【参考方案2】:您正在为您的 log_softmax 函数提供一个 3 元素一维数组。
当说 dim=1 时,您是在告诉它将 softmax 应用于不存在的轴。
只需为一维数组设置 dim=0。
更多关于这个函数和这个参数的含义here
【讨论】:
以上是关于尺寸超出范围(预计在 [-1, 0] 范围内,但得到 1)(pytorch)的主要内容,如果未能解决你的问题,请参考以下文章
IndexError:索引 -9223372036854775808 超出尺寸 2 的维度 1 的范围
来自 Ghostscript 的页面超出范围错误的 PDF 尺寸