概念:
import torch
torch.Tensor()是python类,是默认张量类型FloatTensor()的别名,会调用构造函数并且生成单精度浮点型的张量。
张量的例子:
对于机器学习训练的目的就是为了调整ω的值,致使损失不断减少,因此在上节课(传送门)的学习过程中,对于复杂的网络模型,我们需要花费大量的时间来求解ω,因此我们采用反向传播的方式来求解权重Ω。简单地说,每次前馈通过网络后,该算法根据权值和偏差进行后向传递,调整模型的参数。这样的反向传播虽然带来了2倍于前向传播的计算量,但是会更快地得到更为准确的结果。
反向传播代码实现:
import torch
import matplotlib.pyplot as plt
x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]
w = torch.Tensor([3.0]) #initial gradient
w.requires_grad = True #calculate the gradient automatically
def forward(x):
return w * x
def loss(x,y):
y_pred = forward(x)
return (y_pred - y) ** 2
print("Predict before training",4,forward(4).item()) #item() is the value of tensor
epoch_list = []
loss_list =[]
for epoch in range(100):
for x,y in zip(x_data,y_data):
l=loss(x,y)
l.backward() #propagate backwardly
print('\tgrad',x,y,w.grad.item()) # save the gradient to w, and print the value
learning_rate = 0.01
w.data = w.data - learning_rate*w.grad.data
w.grad.data.zero_() # set the data to zero
print("process:",epoch,l.item())
epoch_list.append(epoch)
loss_list.append(l.item())
print('Predict after training', 4, forward(4).item())
plt.plot(epoch_list,loss_list)
plt.xlabel("epoch")
plt.ylabel("Loss")
plt.show()
参考: