栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Pytorch深度学习笔记 2

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pytorch深度学习笔记 2

前几天学习了梯度下降算法以及随机梯度下降算法,记录一下自己的理解。
梯度下降算法是求最小权重的一种方式,通过数学中求导的方法,在定义初始权重之后,通过定义合理的学习率,来保证每次下降的梯度,从而找到最小的权重。但该算法的局限在于可能碰到鞍点(及提前结束循环训练,找不到全局最优解,该点为局部最优),但事实是并没有过多的局部最优解。

附代码:

import matplotlib.pyplot as plt

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

w = 1 #预估初始权重为4
def forward(x):
    return x*w  #求预估值

def cost(xt,yt):  #求MSE
    cost = 0
    for x,y in zip(xt,yt):
        y_val = forward(x)#forward()函数中不能放如xt,因为此时xt已经通过for循环赋值给了x
        cost += (y_val - y)*(y_val - y)
    return cost/len(xt)  #通过len()函数来计算列表xt的长度,从而求MSE--平均平方误差

def gradient(xt,yt):  #创建grad函数,通过求导来确定是向左还是向右改变权重
    grad = 0
    for x,y in zip(xt,yt):
        grad += 2*x*(x*w - y)
    return grad/len(xt)

print('Predict(before) w=',4,forward(4))
mse_list = []
epoch_list = []
for epoch in range(100): #循环训练100次
    cost_val = cost(x_data,y_data)
    grad_val = gradient(x_data,y_data)  #求梯度
    w -= 0.01*grad_val   #0.01 学习率----更新
    mse_list.append(cost_val)
    epoch_list.append(epoch)
    print('Epoch:', epoch, 'w=', w,  'cost=', cost_val)
print('Predict(before) w=',4,forward(4))


plt.plot(epoch_list,mse_list)  #不能写成plt.plot = ()
plt.xlabel('times')
plt.ylabel('cost')
plt.show()

还是有很多细节上的错误,因为对于python没有很系统的学习过,只是零散的通过查找资料来结合以前学习过的C,C++来理解,像Matplotlib和numpy的的学习还需要多积累,需更加注意。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1030043.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号