反向传播
import numpy as np
import matplotlib.pyplot as plt
import torch
x_data = np.random.randint(1, 6, size=(3))
y_data = x_data * 3
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
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("epoch: {}\tl: {}\t".format(epoch, l.item()))
print("w: ", w.item())