B站视频课《PyTorch深度学习实践》笔记

编程入门 行业动态 更新时间:2024-10-09 07:29:04

B站视频课《PyTorch<a href=https://www.elefans.com/category/jswz/34/1769690.html style=深度学习实践》笔记"/>

B站视频课《PyTorch深度学习实践》笔记

视频链接:

【更新课件下载链接】-2020.11.03
链接:
提取码:cxe4

欢迎大家一起交流学习!

Machine learing

Supervised Learning:

训练集

(训练集)

训练集

(开发集)

 测试集             

在训练集上,因为我们的数据量级无法完全的接近真实的分布,所以如果我们在训练集上训练的非常好,它会造成我们在机器学习里面所遇到的一个核心问题:过拟合

过拟合就是说我们在训练集上的误差很小,但是有可能在训练集上学习的时候把噪声也学进来了,所以我们希望我们的模型有一个较好的泛化能力

泛化能力就是说你在训练集上训练完成后,它对于没见过的图像也能够进行正确的识别。

所以,为了测试模型的泛化能力,通常我们会把训练集分成两份,一份用来训练(训练集),一份用来进行评估(开发集)。

因为很多竞赛中不会给测试集的标签(输出值),所以通常我们在拿到训练集之后,会把它分成两部分,一部分用来训练,一部分用来作为开发集对模型进行评估。如果评估结果显示模型性能比较好,那就把所有的训练集都放入模型里再进行一遍训练,然后再去测试集上进行最终的测试。

这就是我们在面对数据集时常用的一种策略。


Model design

一般来说,很多机器学习任务里最常见的一种思路是先用线性模型,看是否有效。因为在很多任务里发现线性模型可以作为最基本的一种方式来先构建出一个机器学习的训练架构。后面如果发现线性模型不好,那么再更换其他模型。

          表示预测值

Linear Regression

Compute Loss

求平方可以避免出现负值,进而避免出现虽然loss很高,但是正负误差求和后loss等于0的状况。

Loss function & Cost function

Training Loss (Error)     损失函数针对的是一个样本

 

Mean Square Error(MSE) 均方误差针对的是整个training set

 

目标:找一个最优的w权重值,使得MSE降到最低。

对数据集中所有数据根据不同权重计算出相应MSE,那么问题是,找最优权重时用哪些值作为权重的候选值。因为候选值很可能并不能得到真实的那个MSE最小值,所以想了这样一个方法,就是先用算法设计中的穷举法

穷举法的思路:首先经过一些测试,发现权重在0~4之间应该是存在着损失最小的权重,那么就把0~4之间所有可能的取值都去计算一下损失,得到一条曲线,曲线的最低点就是最优的那个权重。 

import numpy as np
import matplotlib.pyplot as pltx_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]#定义模型(前馈)
def forward(x):return x * w#定义损失函数
def loss(x,y):y_prey = forward(x)return (y_prey - y) * (y_prey - y)w_list = np.arange(0.0, 4.1, 0.1)
mse_list = []
for w in w_list:print('w=', w)for x_val, y_val, in zip(x_data, y_data):l_sum = 0loss_val = loss(x_val, y_val)l_sum += loss_valprint('\t', x_val, y_val, forward(x_val), loss_val)print('MSE=', l_sum / 3)mse_list.append(l_sum / 3)plt.plot(w_list, mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()

在深度学习里也要画这样的表(图)确定谁的值最优吗?是的,因为在深度学习中我们很难判定结果何时收敛。深度学习中是重视可视化的。

其实在深度学习里做训练的时候确实要经常画这种表(图),但我们不是用权重作为横坐标,而是用训练的轮数epoch,通常训练集的loss会随着epoch增大而下降,然后趋于一个稳定值,此时,再用开发集求loss,会发现其loss先下降,下降到一个点后会再上升,那么根据训练集和开发集图中的最低点作为我们想得到的值。

Visdom是Facebook开源的可视化工具包,将来使用Visdom这个库可以创建一个外部服务,然后可以在代码中绘图。


  • 作业:Linear Model   ,画出cost graph。
  • Tips:

如何画3D图.html#sphx-glr-tutorials-toolkits-mplot3d-py(并不好用,建议直接百度)

函数np.meshgrid()对于画3D图被普遍使用:.meshgrid.html#numpy.meshgrid

参考代码:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 数据集 y_data= 2 * x_data + 2
x_data = [1.0, 2.0, 3.0]
y_data = [4.0, 6.0, 8.0]# 定义模型(前馈)
def forward(x):return x * w + b# 定义损失函数
def loss(x,y):y_prey = forward(x)return (y_prey - y) * (y_prey - y)w_list = np.arange(0.0, 4.1, 0.1)
b_list = np.arange(0.0, 4.1, 0.1)
[w,b] = np.meshgrid(w_list, b_list)
mse_list = []
l_sum = 0
#count = 0
# y_pred_val_dic = {}
# loss_val_dic = {}
for x_val, y_val, in zip(x_data, y_data):# count += 1# y_pred_val_dic[str(count)] = forward(x_val)loss_val = loss(x_val, y_val)# loss_val_dic[str(count)] = loss_vall_sum += loss_val
# print(y_pred_val_dic)
print(np.where(l_sum == 0)) # 找到MSE=0的位置,即最优解位置,答案为(20,20),对应w=2,b=2,与已知相符# 定义三维坐标轴(两种方法,这是其中一种)
fig = plt.figure()
ax = plt.axes(projection = '3d')
# 作图
# rstride:行之间的跨度;cstride:列之间的跨度;
# rcount:设置间隔个数,默认为50;ccount:列的间隔个数   不能与上面两个参数同时出现
# cmap:颜色映射表
ax.plot_surface(w,b,l_sum /3,rstride=1, cstride=1, cmap=plt.cm.coolwarm)
ax.set_title('Cost value')
plt.show()

效果图:

 

 

 

 

更多推荐

B站视频课《PyTorch深度学习实践》笔记

本文发布于:2024-02-27 21:28:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1766463.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:深度   笔记   视频   PyTorch

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!