Neural network 如何使用Pytork';s Autograd以支持多层(材质)?

Neural network 如何使用Pytork';s Autograd以支持多层(材质)?,neural-network,pytorch,backpropagation,Neural Network,Pytorch,Backpropagation,为了学习,我尝试从头修改这个三层神经网络,除了我想使用Pytorch Autograd函数来计算delta和backprop权重外,我仍然从头开始使用所有东西。具体地说,我只想将预测的均方误差减去y存储为'loss',并对其进行'loss.backwards()'。 我用Autograd建立了一个成功的线性回归模型,但它在这里不起作用 我尝试将层和权重放在for循环的内部和外部。我已经做了修补,试图让一切都“需要毕业”。 实际上,这是我目前在Python3.6中的错误 Traceback (mo

为了学习,我尝试从头修改这个三层神经网络,除了我想使用Pytorch Autograd函数来计算delta和backprop权重外,我仍然从头开始使用所有东西。具体地说,我只想将预测的均方误差减去y存储为'loss',并对其进行'loss.backwards()'。
我用Autograd建立了一个成功的线性回归模型,但它在这里不起作用

我尝试将层和权重放在for循环的内部和外部。我已经做了修补,试图让一切都“需要毕业”。
实际上,这是我目前在Python3.6中的错误

Traceback (most recent call last):
  File "nn_scratch_trash.py", line 96, in <module>
    layer_2.data -= layer_2.grad.data
AttributeError: 'NoneType' object has no attribute 'data'  

这里的
V
是什么?你在numpy数组上的
requires_grad=True
是怎么做的?“V”让Pytorch在某种程度上使用了它,我不太熟悉,无法正确解释。我尝试将requires_grad=True添加到带有X,y=V(X),V(y)的行中。它给出了一个新错误“RuntimeError:grad只能为标量输出隐式创建”
import numpy as np
import random
import torch

np.random.seed(111)

X = np.random.randn(6,4)
y = np.random.randn(6,1)


def zeround(x):
    x = 1 / ( 1 + (np.exp(-x)))
    x = np.around(x)
    return x

# Create Random X and y arrays of random 1s and 0s with the zeround function I made.
y = zeround(y)
X = zeround(X)

X, y = V(X), V(y)

# randomly initialize our weights
weight_0 = V(np.random.randn(4,6), requires_grad=True) - 1
weight_1 = V(np.random.randn(6,7), requires_grad=True) - 1
weight_2 = V(np.random.randn(7,1), requires_grad=True) - 1

# Feed forward through layers 0, 1, and 2
layer_1 = V(((X @ weight_0)), requires_grad=True)
layer_2 = V(((layer_1 @ weight_1)), requires_grad=True)
layer_3 = V(((layer_2 @ weight_2)), requires_grad=True)

print((layer_1))
print((layer_2))
print((layer_3))
print(y)

for j in range(10000):
    # torch backprop
    loss = ((layer_3 - y))
    loss.backward()

    print(weight_2.requires_grad)

    # UPDATE WEIGHTS
    weight_0.data -= weight_0.grad.data
    weight_1.data -= weight_1.grad.data
    weight_2.data -= weight_2.grad.data

    weight_0.grad.data.zero_()
    weight_1.grad.data.zero_()
    weight_2.zero_()

    if j == 9999:
        print (loss.item())