街景字符编码识别-task4:模型训练与验证

Pytorch GPU 环境搭建遇到的问题

在开始之前先把之前baseline代码运行的环境问题记录一下:
由于CPU跑的比较慢,所以想试着用GPU来做。但是运行提示错误:torch not compiled with CUDA enabled. check了一下环境列表,发现pytroch安装的是cpu版本。安装的时候用的是conda install pytorch cudatoolkit=10.0 -c pytorch命令安装的,并没有指定cpu版本。用torch.cuda.is_available()试了一下,返回的是false。

>>> import torch
>>> torch.cuda.is_available()
False

于是查找cuda,cudnn,pytorch,GPU的版本匹配问题。可以参考这篇博文,写的很详细。发现我的电脑上cuda是9.2版本,而且没有安装cudnn,于是安装了匹配cuda9.2的cudnn7.0。并且conda uninstall pytorch卸载pytorch,然后从这篇博文的清华镜像源里下载了pytorch-1.5.0-py3.7_cuda92_cudnn7_0.tar.bz2,然后手动安装,安装之后check list,此时pytorch是gpu版本了。
conda list
再来运行baseline代码,发现numpy包被卸载了,突然想起来uninstall pytorch的时候好像把numpy作为关联包也卸载了。于是conda install numpy,安完之后发现pytorch又回到了cpu版本。后来尝试用conda remove pytorch来卸载,发现重新安装的numpy没有被卸载掉。但是remove和uninstall不是一回事吗?conda官网说这两个就是别名的关系啊。可能之前的操作有不对的地方,也许这次用conda uninstall来卸载也没问题了。总之,这时候再运行torch.cuda.is_available()也可以返回true了。

模型训练与验证

之前接触到的有限的深度学习知识里只有训练集和测试集,分别用来训练和测试。所以对验证集的概念很陌生。下面就验证集描述一下我的理解:
根据学习资料中描述,验证集是用来验证模型精度和调整模型超参数的。但是通过代码发现,validate之后只计算了val loss,那么什么是超参数?超参数是怎么调整的?
首先,超参数是指那些不是通过训练学习出来的参数,当然也有可以学习超参数的算法,比如sklearn可以用GridSearch网格搜索调参,穷举所有参数组合。
看完这个概念我第一个想到的就是学习率,接着是batch size和epoch。当然还有很多,参见超参数的详细介绍1,2
所以,超参数大多是根据val loss来手动调整的。

baseline代码运行

在运行baseline代码的时候,发现train loss 根本就不会下降。后来发现,之前理解代码的时候注释掉了三行代码(如下)。加上这三行之后,第一个epoch里loss就有很明显的下降。于是查了一下各函数的功能,注释如下。

        optimizer.zero_grad()#Clears the gradients of all optimized torch.Tensor s.
        loss.backward()#Back Propagation
        optimizer.step()#Performs a single optimization step (parameter update).

现在明白了,为什么之前loss不下降,注释掉这三行相当于没有梯度下降来更新参数。
之前一直没有看明白baseline中模型里的各层之间是怎么进行输入输出并连接到一起的。想到tensorflow中有model.summary()这个函数可以输出网络与网络的参数详情。于是找到pytorch里也有类似工具,需要安装pytorch_model_summary,按照官网的教程输出了网络以及各层的输出参数,原来我没有理解nn.AdaptiveAvgPool2d(1)的含义,这个层的参数就是该层的输出参数个数,所以经过该层之后每个channel只剩下1个元素了。这样就和后面的全连接层对上了。

听课之后

今天的直播主题是模型训练与验证,对于新手来说真是干货满满,讲了一些理论上的注意事项和方法,又在理论之后结合实践进行示范。
不过只记住了单一变量原则,等拿到PPT之后再复习补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值