03梯度下降算法

梯度下降算法

import torch
import numpy as np
import matplotlib.pyplot as plt

# 鞍点:g=0


# 梯度下降
# 创建数据
x_data = np.random.randint(1, 10, size=(3))
y_data = x_data * 2

w = 1.0 # 设置w初值

# 创建模型
def forward(x):
    return x * w

# batch=全部样本
def cost(x_s, y_s):
    loss = 0
    for x, y in zip(x_s, y_s):
        y_pred = forward(x)
        loss += (y_pred - y) ** 2
    return loss / x_data.shape

# 计算梯度
def gradient(x_s, y_s):
    grad = 0
    for x, y in zip(x_s, y_s):
        grad = 2 * x * (w * x - y)  #求cost关于w的导数
    return grad / x_data.shape

print("Print w = %f (before training)" % w)

cost_list = []  # 存储cost,方便画图
w_list = []     # 存储w,方便画图
for epoch in range(100):
    w_list.append(w)
    cost_val = cost(x_data, y_data)
    grad = gradient(x_data, y_data)
    w -= 0.01 * grad
    print("Epoch: ", epoch, "\t", "w=: ", w, "\t", "cost=: ", cost_val, "\t")
    cost_list.append(cost_val)
print("Predict w = %f (after training)" % w)

# 画图
plt.plot(range(100), cost_list)
plt.xlabel("epoch")
plt.ylabel("cost")
plt.show()
plt.close()


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值