上一期把准备工作都搞定了,这一期就是直接开始对代码进行手撕并讲解结构。首先先看一下代码的主体架构是啥子造型。
这篇复现代码最舒服的地方就是把什么零件都在外面给你展示好了,至少不用在各种奇奇怪怪的文件夹里面翻箱倒柜。这里面进行解析的时候先把预处理的放到一边,从训练开始进行一点一点的解构,也就是train.py
train.py 模型训练过程
按照我的个人经验来说,从main函数进行拆解的话效率会特别高。那就直接进行拆解。
简单粗暴到有点过分的程度,直接调用函数进行看似复杂的训练过程。首先声明了全局变量args,用parse_args赋值,然后就用train_net进行训练调用。越是看起来简单的语句实际上背后搞的事情远比想像中的多。。。这时候就需要ctrl+鼠标点击直接寻找对应的位置看相关函数是怎么运行的。首先先看看parse_args
看起来这些参数是真的有点不知所云,只能一点一点解析。(其实这里跟最后训练的模型没啥太大关系,不搞也没啥,为了严谨性外加充字数还是研究研究吧以后没准还得写)首先parser这个变量是什么东西我们需要先看一看。parser是一个ArgumentParser变量,按照官方文档的意思就是:
这。。是个啥。。。。
按照大神命令行传递参数 argparse.ArgumentParser解析_Puppy_L的博客-CSDN博客
的解释来说,就是在程序运行的时候能在命令行方便传参数,这样就可以避免直接修改代码(懒人福音)。那么现在就挨个看这些个参数究竟是怎么回事
以这句为例,它使用了一个新版的功能:add_argument
这句的作用就是:定义一个叫做end-epoch的参数,默认值为100且类型为int,这个参数是training-epoch-size,epoch都知道是完整训练的次数,默认是100,由于这里面对于end-epoch前面是两个横杠 - -,因此使用的时候就需要在命令行重写end-epoch参数的时候要先加两个横杠再在后面进行赋值(大神的csdn博客里面解释的特别清楚了)。
由此这个函数的作用就变得清晰明白:在运行的时候能够通过命令行进行参数的赋值以及修改。这个功能对于使用者来说真的很舒服。