P4 反向传播

62 阅读1分钟

模型y=w*x

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 w * x  
  
def loss(x, y):  
    y_pred = forward(x)  
    return (y_pred - y) ** 2  
  
print('predict (before training)', 4, forward(4).item)  

#训练100for 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 = w.data - 0.01 * w.grad.data  
    w.grad.data.zero_()  
  
    print('progress:', epoch, l.item())  
print('predict (after training)', 4, forward(4).item())

模型y=w1x^2+w2x+b

import torch  

#导入数据
x_data = [1.0, 2.0, 3.0]  
y_data = [2.0, 4.0, 6.0]  

#定义权重
w1 = torch.tensor([1.0])  
w2 = torch.tensor([1.0])  
w1.requires_grad = True  
w2.requires_grad = True  

#定义模型、损失
def forward(x):  
return w1 * (x ** 2) + w2 * x  
  
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, w1.grad.item(), w2.grad.item(), w1.data, w2.data)  
    w1.data = w1.data - 0.01 * w1.grad.data  
    w2.data = w2.data - 0.01 * w2.grad.data  
    w1.grad.data.zero_()  
    w2.grad.data.zero_()  
  
print('progress:', epoch, l.item())  
print('predict (after training', 4, forward(4).item())