猿问

我正在尝试使用 pytorch 库构建一个带有一个神经元的神经网络。它一直给我一个错误

我正在尝试使用 pytorch 库构建一个带有一个神经元的神经网络。这是我的代码(错误在底部)


import numpy as np

import random

import matplotlib.pyplot as plt


x_train = np.array([random.randint(1,1000) for x in range(1000)], dtype = np.float32)

y_train = np.array([int(num*3+1) for num in x_train], dtype = np.float32)


x_test = np.array([random.randint(1,1000) for x in range(1000)], dtype = np.float32)

y_test = np.array([int(num*3+1) for num in x_train], dtype = np.float32)


X_train = torch.from_numpy(x_train)

Y_train = torch.from_numpy(y_train)


plt.figure(figsize = (8,8))

plt.scatter(X_train, Y_train)

plt.show()


X_test = torch.from_numpy(x_test)

Y_test = torch.from_numpy(y_test)


input_size = 1

hidden_size = 1

output_size = 1

learning_rate = 0.1



w1 = torch.rand(input_size, hidden_size, requires_grad = True)

b1 = torch.rand(hidden_size, output_size, requires_grad = True)




for i in range(100):

    y_pred = X_train.mm(w1).clamp(min = 0).add(b1)

    loss = (Y_train-y_pred).pow(2).sum()


    loss.backward()


    with torch.no_grad():

        w1-=w1.grad*learning_rate

        b1 -= b1.grad*learning_rate

        w1.grad.zero_()

        b1.grad.zero_()

当我运行此代码时,它给了我一个运行时错误:


RuntimeError                              Traceback (most recent call last)

<ipython-input-84-5142b17ecfff> in <module>

     32 

     33 for i in range(100):

---> 34     y_pred = X_train.mm(w1).clamp(min = 0).add(b1)

     35     loss = (Y_train-y_pred).pow(2).sum()

     36 


RuntimeError: matrices expected, got 1D, 2D tensors at C:\w\1\s\windows\pytorch\aten\src\TH/generic/THTensorMath.cpp:192

那行代码有什么问题以及如何使其按计划工作。


牧羊人nacy
浏览 121回答 1
1回答

烙印99

torch需要 2D 输入,因此您需要为输入张量添加一个新维度。X_train&nbsp;=&nbsp;torch.from_numpy(x_train[...,&nbsp;np.newaxis]) X_test&nbsp;=&nbsp;torch.from_numpy(x_test[...,&nbsp;np.newaxis])正如上面有人评论的那样,您还可以使用torch.unsqueeze:for&nbsp;i&nbsp;in&nbsp;range(100): &nbsp;&nbsp;&nbsp;&nbsp;y_pred&nbsp;=&nbsp;torch.unsqueeze(X_train,&nbsp;1).mm(w1).clamp(min&nbsp;=&nbsp;0).add(b1) &nbsp;&nbsp;&nbsp;&nbsp;loss&nbsp;=&nbsp;(Y_train-y_pred).pow(2).sum()两者都做同样的事情。前者将其应用于numpy数组,后者将其应用于torch张量。两者都会产生这种形状,这是正确的格式torch:Out[13]:&nbsp;torch.Size([1000,&nbsp;1])
随时随地看视频慕课网APP

相关分类

Python
我要回答