PyTorch深度学习:反向传播

背景:

PyTorch深度学习:反向传播_第1张图片

        对于复杂的模型如上图, 求出每一个函数,计算每一个权重工作量十分庞大,几乎是不可能完成的任务,这时候就要使用反向传播波算法。

基本过程:

①前汇运算:

从左向右运算,得到损失值Loss

PyTorch深度学习:反向传播_第2张图片

 

②反向传播:

从得到的Loss反向推出x与w的梯度

PyTorch深度学习:反向传播_第3张图片

注意:

为了提高模型的复杂度,不进行化简,所以增加一个非线性函数

增加前:权值被化简

PyTorch深度学习:反向传播_第4张图片

增加后:不再可被化简

PyTorch深度学习:反向传播_第5张图片

 

代码实现过程:

import torch

x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]

w = torch.tensor([1.0])
w.requires_grad = True

def forward (x):
    return x*w

def loss(x,y):
    y_pred = forward(x)
    return (y_pred-y)**2

print ("predict before training",4,forward(4).item())

for epoch in range(100):
    for x,y in zip(x_data,y_data):
        l = loss(x,y)
        l.backward()
        print("\tgrad",x,y,w.grad.item())
        w.data = w.data-0.01*w.grad.data

        w.grad.data.zero_()

    print("progress",epoch,l.item)

print ("predict before training",4,forward(4).item())

 

 

 

你可能感兴趣的:(大数据,python,pytorch,计算机视觉)