Neural network 如何使用Pytork';s Autograd以支持多层(材质)?
为了学习,我尝试从头修改这个三层神经网络,除了我想使用Pytorch Autograd函数来计算delta和backprop权重外,我仍然从头开始使用所有东西。具体地说,我只想将预测的均方误差减去y存储为'loss',并对其进行'loss.backwards()'。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
我用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())