文章目录
示例
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
w = 1.0
def forward(x):
return x * w
def cost(xs, ys):
cost = 0
for x, y in zip(xs, ys):
y_pred = forward(x)
cost += (y_pred - y) ** 2
return cost/len(xs)
def gradient(xs, ys):
grad = 0
for x, y in zip(xs, ys):
grad += 2 * x * (x * w - y)
return grad / len(xs)
for epoch in range(100):
cost_val = cost(x_data, y_data)
grad_val = gradient(x_data, y_data)
w -= 0.01 * grad_val
if epoch % 10 == 1:
print(f'-- epoch : {epoch}, w : {w}, loss : {cost_val}' )
-- epoch : 1, w : 1.1779555555555554, loss : 3.8362074074074086
-- epoch : 11, w : 1.6914171457314033, loss : 0.5405738908195378
-- epoch : 21, w : 1.8841627376815275, loss : 0.07617422636521683
-- epoch : 31, w : 1.9565164714895047, loss : 0.010733986344664803
-- epoch : 41, w : 1.983676951493168, loss : 0.0015125649231412608
-- epoch : 51, w : 1.9938725783835114, loss : 0.0002131410058905752
-- epoch : 61, w : 1.9976998600690001, loss : 3.0034471708953996e-05
-- epoch : 71, w : 1.9991365628100501, loss : 4.232266273994499e-06
-- epoch : 81, w : 1.999675878945041, loss : 5.963839812987369e-07
-- epoch : 91, w : 1.9998783299358769, loss : 8.403862850836479e-08
print(f'\n-- predict : f - ', forward(4) )
# -- predict : f - 7.999777758621207