官方参考资料
如果您看到我的记录,建议忽略我的,看官方参考资料,现在水平,不值得您看
python是一种面向对象抽象,书写深度学习程序,最好是将所有程序对象像化,这样的化,可以花更多的精力在网络结构上,在这里介绍基于pytorch高级库Ignite,这个非常有用的库,下面看下源码布局
Ignite介绍
读这个之前,最好看官网github的列子
这个package中包含四个包:
- contrib
- engine
- handlers
- metrics
这里每个package的源码有兴趣,可以读一读,感受一下,大神是如何设计package的。 一天时间,我反正是没有看懂——2019.7.2
四个概念的介绍
一、Engine
Engine是Ignite中最主要的类,它的作用是提供一个trainer 和 evaluater。
- trainer:相当于在样本上执行process_function函数执行多此,并更新参数。
- evaluater:相当于在数据上process_函数一次,输出结果:
因此:Engine具有
- 循环功能
while epoch < max_epochs:
# run once on data
for batch in data:
output = process_function(batch)
- 更新参数
二、Events and Handler
Events有以下几种:
Handle是在触发上述事件时运行的函数。这个函数可以通过装饰器的方式,装饰到事件上,有两种发视定义,这里介绍一种:
这个代码的意思是:每次Iteration_completed
迭代结束后,触发```log_training_loss`函数,这个函数功能是:输出loss,另外loss写入tensorbord的writer对象。
三、Timeline and events
这个图我也不明白什么意思,大概是想表述,epoch_start——iteration_start——iteration_end——epoch_end,
iteration_end,判断,输出此次iteration的loss,在epoch,输出,此时模型在训练集,和测试集上的准确率或者其他指标
四、State
state对象在Engine中引入,用来存储,process_function的输出(上文有介绍这个函数),当前的epoch,iteration,还有其他信息,每个Engine有一个State,如下:
- engine.state.epoch:Number of epochs the engine has completed. Initializated as 0.
- engine.state.max_epochs: Number of epochs to run for. Initializated as 1.
- engine.state.iteration: Number of iterations the engine has completed. Initialized as 0.
- engine.state.output: The output of the process_function defined for the Engine.
综上:这里介绍下,利用Ignite进行训练的基本思路:
- 构建
class Net(nn.Module)
网络结构 - 定义函数
get_data_loaders(train_batch_size, val_batch_size)
, 返回train_loader,val_loader
- 创建函数
create_summary_writer(model,data_loader, dog_dir)
,返回的是一个SummaryWriter对象 - 定义
run(train_batch_size,val_batch_size, epochs, lr, momentum, log_interval, log_dir)
- 这个函数要定义
train_loader、val_batch_size
、模型、SummaryWriter对象、优化器、trainer、evaluator、 - 定义handles,通过事件触发程序
- 这个函数要定义
- 运行函数