【PyTorch基础教程1】线性模型(学不会来打我啊)

网友投稿 526 2022-11-17

【PyTorch基础教程1】线性模型(学不会来打我啊)

【PyTorch基础教程1】线性模型(学不会来打我啊)

文章目录

​​一、线性模型​​​​二、绘图工具​​​​三、作业​​​​Reference​​

一、线性模型

不要小看简单线性模型哈哈,虽然这讲我们还没正式用到pytorch,但是用到的前向传播、损失函数、两种绘loss图等方法在后面是很常用的。 对下面的代码说明:

​​zip​​​函数可以将​​x_data​​​和​​y_data​​组合元组列表,在for循环中每次遍历就是对于列表中的每个元组。函数​​forward()​​中,有一个变量w。这个变量最终的值是从for循环中传入的。

# -*- coding: utf-8 -*-"""Created on Tue Oct 12 14:30:13 2021@author: 86493"""import numpy as npimport matplotlib.pyplot as pltx_data = [1.0, 2.0, 3.0]y_data = [2.0, 4.0, 6.0]def forward(x): return x * wdef loss(x, y): y_pred = forward(x) return (y_pred - y) * (y_pred - y)# 保存权重w_list = []# 保存权重的损失函数值mse_list = []# 穷举w值对应的损失函数MSEfor w in np.arange(0.0, 4.1, 0.1): print('w = ', w) loss_sum = 0 for x_val, y_val in zip(x_data, y_data): # 为了打印y预测值,其实loss里也计算了 y_pred_val = forward(x_val) loss_val = loss(x_val, y_val) loss_sum += loss_val print('\t', x_val, y_val, y_pred_val, loss_val) print('MSE = ', loss_sum / 3) print('='*60) w_list.append(w) mse_list.append(loss_sum / 3) # 绘loss变化图,横坐标是w,纵坐标是lossplt.plot(w_list, mse_list)plt.ylabel('Loss')plt.xlabel('w')plt.show()

刚才对应的打印结果为:

w = 0.0 1.0 2.0 0.0 4.0 2.0 4.0 0.0 16.0 3.0 6.0 0.0 36.0MSE = 18.666666666666668============================================================w = 0.1 1.0 2.0 0.1 3.61 2.0 4.0 0.2 14.44 3.0 6.0 0.30000000000000004 32.49MSE = 16.846666666666668============================================================w = 0.2 1.0 2.0 0.2 3.24 2.0 4.0 0.4 12.96 3.0 6.0 0.6000000000000001 29.160000000000004MSE = 15.120000000000003============================================================w = 0.30000000000000004 1.0 2.0 0.30000000000000004 2.8899999999999997 2.0 4.0 0.6000000000000001 11.559999999999999 3.0 6.0 0.9000000000000001 26.009999999999998MSE = 13.486666666666665============================================================w = 0.4 1.0 2.0 0.4 2.5600000000000005 2.0 4.0 0.8 10.240000000000002 3.0 6.0 1.2000000000000002 23.04MSE = 11.946666666666667============================================================w = 0.5 1.0 2.0 0.5 2.25 2.0 4.0 1.0 9.0 3.0 6.0 1.5 20.25MSE = 10.5============================================================w = 0.6000000000000001 1.0 2.0 0.6000000000000001 1.9599999999999997 2.0 4.0 1.2000000000000002 7.839999999999999 3.0 6.0 1.8000000000000003 17.639999999999993MSE = 9.146666666666663============================================================w = 0.7000000000000001 1.0 2.0 0.7000000000000001 1.6899999999999995 2.0 4.0 1.4000000000000001 6.759999999999998 3.0 6.0 2.1 15.209999999999999MSE = 7.886666666666666============================================================w = 0.8 1.0 2.0 0.8 1.44 2.0 4.0 1.6 5.76 3.0 6.0 2.4000000000000004 12.959999999999997MSE = 6.719999999999999============================================================w = 0.9 1.0 2.0 0.9 1.2100000000000002 2.0 4.0 1.8 4.840000000000001 3.0 6.0 2.7 10.889999999999999MSE = 5.646666666666666============================================================w = 1.0 1.0 2.0 1.0 1.0 2.0 4.0 2.0 4.0 3.0 6.0 3.0 9.0MSE = 4.666666666666667============================================================w = 1.1 1.0 2.0 1.1 0.8099999999999998 2.0 4.0 2.2 3.2399999999999993 3.0 6.0 3.3000000000000003 7.289999999999998MSE = 3.779999999999999============================================================w = 1.2000000000000002 1.0 2.0 1.2000000000000002 0.6399999999999997 2.0 4.0 2.4000000000000004 2.5599999999999987 3.0 6.0 3.6000000000000005 5.759999999999997MSE = 2.986666666666665============================================================w = 1.3 1.0 2.0 1.3 0.48999999999999994 2.0 4.0 2.6 1.9599999999999997 3.0 6.0 3.9000000000000004 4.409999999999998MSE = 2.2866666666666657============================================================w = 1.4000000000000001 1.0 2.0 1.4000000000000001 0.3599999999999998 2.0 4.0 2.8000000000000003 1.4399999999999993 3.0 6.0 4.2 3.2399999999999993MSE = 1.6799999999999995============================================================w = 1.5 1.0 2.0 1.5 0.25 2.0 4.0 3.0 1.0 3.0 6.0 4.5 2.25MSE = 1.1666666666666667============================================================w = 1.6 1.0 2.0 1.6 0.15999999999999992 2.0 4.0 3.2 0.6399999999999997 3.0 6.0 4.800000000000001 1.4399999999999984MSE = 0.746666666666666============================================================w = 1.7000000000000002 1.0 2.0 1.7000000000000002 0.0899999999999999 2.0 4.0 3.4000000000000004 0.3599999999999996 3.0 6.0 5.1000000000000005 0.809999999999999MSE = 0.4199999999999995============================================================w = 1.8 1.0 2.0 1.8 0.03999999999999998 2.0 4.0 3.6 0.15999999999999992 3.0 6.0 5.4 0.3599999999999996MSE = 0.1866666666666665============================================================w = 1.9000000000000001 1.0 2.0 1.9000000000000001 0.009999999999999974 2.0 4.0 3.8000000000000003 0.0399999999999999 3.0 6.0 5.7 0.0899999999999999MSE = 0.046666666666666586============================================================w = 2.0 1.0 2.0 2.0 0.0 2.0 4.0 4.0 0.0 3.0 6.0 6.0 0.0MSE = 0.0============================================================w = 2.1 1.0 2.0 2.1 0.010000000000000018 2.0 4.0 4.2 0.04000000000000007 3.0 6.0 6.300000000000001 0.09000000000000043MSE = 0.046666666666666835============================================================w = 2.2 1.0 2.0 2.2 0.04000000000000007 2.0 4.0 4.4 0.16000000000000028 3.0 6.0 6.6000000000000005 0.36000000000000065MSE = 0.18666666666666698============================================================w = 2.3000000000000003 1.0 2.0 2.3000000000000003 0.09000000000000016 2.0 4.0 4.6000000000000005 0.36000000000000065 3.0 6.0 6.9 0.8100000000000006MSE = 0.42000000000000054============================================================w = 2.4000000000000004 1.0 2.0 2.4000000000000004 0.16000000000000028 2.0 4.0 4.800000000000001 0.6400000000000011 3.0 6.0 7.200000000000001 1.4400000000000026MSE = 0.7466666666666679============================================================w = 2.5 1.0 2.0 2.5 0.25 2.0 4.0 5.0 1.0 3.0 6.0 7.5 2.25MSE = 1.1666666666666667============================================================w = 2.6 1.0 2.0 2.6 0.3600000000000001 2.0 4.0 5.2 1.4400000000000004 3.0 6.0 7.800000000000001 3.2400000000000024MSE = 1.6800000000000008============================================================w = 2.7 1.0 2.0 2.7 0.49000000000000027 2.0 4.0 5.4 1.960000000000001 3.0 6.0 8.100000000000001 4.410000000000006MSE = 2.2866666666666693============================================================w = 2.8000000000000003 1.0 2.0 2.8000000000000003 0.6400000000000005 2.0 4.0 5.6000000000000005 2.560000000000002 3.0 6.0 8.4 5.760000000000002MSE = 2.986666666666668============================================================w = 2.9000000000000004 1.0 2.0 2.9000000000000004 0.8100000000000006 2.0 4.0 5.800000000000001 3.2400000000000024 3.0 6.0 8.700000000000001 7.290000000000005MSE = 3.780000000000003============================================================w = 3.0 1.0 2.0 3.0 1.0 2.0 4.0 6.0 4.0 3.0 6.0 9.0 9.0MSE = 4.666666666666667============================================================w = 3.1 1.0 2.0 3.1 1.2100000000000002 2.0 4.0 6.2 4.840000000000001 3.0 6.0 9.3 10.890000000000004MSE = 5.646666666666668============================================================w = 3.2 1.0 2.0 3.2 1.4400000000000004 2.0 4.0 6.4 5.760000000000002 3.0 6.0 9.600000000000001 12.96000000000001MSE = 6.720000000000003============================================================w = 3.3000000000000003 1.0 2.0 3.3000000000000003 1.6900000000000006 2.0 4.0 6.6000000000000005 6.7600000000000025 3.0 6.0 9.9 15.210000000000003MSE = 7.886666666666668============================================================w = 3.4000000000000004 1.0 2.0 3.4000000000000004 1.960000000000001 2.0 4.0 6.800000000000001 7.840000000000004 3.0 6.0 10.200000000000001 17.640000000000008MSE = 9.14666666666667============================================================w = 3.5 1.0 2.0 3.5 2.25 2.0 4.0 7.0 9.0 3.0 6.0 10.5 20.25MSE = 10.5============================================================w = 3.6 1.0 2.0 3.6 2.5600000000000005 2.0 4.0 7.2 10.240000000000002 3.0 6.0 10.8 23.040000000000006MSE = 11.94666666666667============================================================w = 3.7 1.0 2.0 3.7 2.8900000000000006 2.0 4.0 7.4 11.560000000000002 3.0 6.0 11.100000000000001 26.010000000000016MSE = 13.486666666666673============================================================w = 3.8000000000000003 1.0 2.0 3.8000000000000003 3.240000000000001 2.0 4.0 7.6000000000000005 12.960000000000004 3.0 6.0 11.4 29.160000000000004MSE = 15.120000000000005============================================================w = 3.9000000000000004 1.0 2.0 3.9000000000000004 3.610000000000001 2.0 4.0 7.800000000000001 14.440000000000005 3.0 6.0 11.700000000000001 32.49000000000001MSE = 16.84666666666667============================================================w = 4.0 1.0 2.0 4.0 4.0 2.0 4.0 8.0 16.0 3.0 6.0 12.0 36.0MSE = 18.666666666666668============================================================

二、绘图工具

在深度学习中,我们一般没有打印上面这种loss图(一般横坐标为epoch,而上面这种图可以用于检测最优超参数是多少),下图这里loss虽然随着epoch增大而减少,但是在开发集上的效果却可能是先减小后增大的,所以应该找中间这个画竖线的点。

PS:可以学习模型训练可视化​​visdom​​工具,训练还要注意存盘的问题(如防止要训练7天,但在第6天报错了)。

画图除了用​​matplotlib.pyplot​​,还经常使用pandas的dataframe.plot,如下:

# 增加loss折线图import pandas as pddf = pd.DataFrame(columns = ["Loss"]) # columns列名df.index.name = "Epoch" for epoch in range(1, 201): loss = train() #df.loc[epoch] = loss.item() df.loc[epoch] = loss.item()df.plot()

上面这种loss图也是最典型的.

三、作业

# -*- coding: utf-8 -*-"""Created on Tue Oct 12 17:04:46 2021@author: 86493"""import numpy as npimport matplotlib.pyplot as plt;from mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmx_data = [1.0, 2.0, 3.0]y_data = [2.0, 4.0, 6.0]# 线性模型,多了个bdef forward(x,w,b): return x * w + b# 损失函数,此处没变def loss(x, y, w, b): y_pred = forward(x, w, b) return (y_pred - y) * (y_pred - y)# 单独写出mse函数,为了计算不同w和b情况下对应的msedef mse(w,b): l_sum = 0 for x_val, y_val in zip(x_data, y_data): y_pred_val = forward(x_val,w,b) loss_val = loss(x_val, y_val,w,b) l_sum += loss_val print('\t', x_val, y_val, y_pred_val, loss_val) print('MSE=', l_sum / 3) return l_sum/3#迭代取值,计算每个w取值下的x,y,y_pred,loss_valmse_list = []# 画图# 1.定义网格化数据b_list=np.arange(-30,30,0.1)w_list=np.arange(-30,30,0.1);# 2.生成网格化数据xx, yy = np.meshgrid(b_list, w_list, sparse=False, indexing='xy')# 3.每个点的对应高度zz=mse(xx,yy)fig = plt.figure()ax = Axes3D(fig)ax.plot_surface(xx, yy, zz, rstride=1, # rows stride 指定行的跨度为1,只能是int cstride=1, # columns stride 指定列的跨度为1 cmap=cm.viridis) # 设置曲面的颜色plt.show()

Reference

[1] 3D图绘制:[2] [3] ​​​Matplotlib3D作图-plot_surface(), .contourf(), plt.colorbar()​​​

[4]​​【matplotlib】如何进行颜色设置选择cmap​​

[6] http://biranda-/archives/page/2/

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【python】tips
下一篇:大数据开发岗位的几个方向
相关文章

 发表评论

暂时没有评论,来抢沙发吧~