将“int”转换为pytorch“变量”会出现问题

问题描述 投票:0回答:1

第一个使用 pytorch 的项目,我在尝试将 MNIST 标签“int”转换为 torch“变量”时陷入困境。调试器说它没有尺寸?!

# numpy mnist data
X_train, Y_train = read_data("training")
X_test , Y_test  = read_data("testing")

arr = np.zeros(5)
for i in range(5):
    # in your training loop:
    costs_ = 0
    for k in range(10000):
        optimizer.zero_grad()                            # zero the gradient buffers
        a = torch.from_numpy(np.expand_dims(X_train[k].flatten(), axis=0)).float()
        b = torch.from_numpy(np.array(Y_train[k], dtype=np.float)).float()
        input = Variable(a)
        output = net(input)
        target = Variable(b)                             # PROBLEM!!
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()                                 # Does the update

        costs_ += loss.data.numpy()
    arr[i] = costs_ 
    print(i)

抛出的错误是:“运行时错误:输入和目标具有不同数量的元素:输入[1 x 1]有1个元素,而目标[]在/b/wheel/pytorch-src/torch/lib/THNN/有0个元素通用/MSECriterion.c:12"

python numpy pytorch
1个回答
1
投票

该错误准确地告诉您发生了什么。您的

target
变量为空。

编辑(在下面的评论之后):

如果

Y_train[k] = 5
,则
np.array(Y_train[k], dtype=np.float).shape = ()
,进而
Variable(b)
成为无量纲张量。

为了解决此问题,您需要将列表传递给

np.array()
,而不是整数或浮点数。

像这样:

b = torch.from_numpy(np.array([Y_train[k]], dtype=np.float)).float()
© www.soinside.com 2019 - 2024. All rights reserved.