2023-01-09

一个深度学习项目结构的感想:

通用结构(Pytorch框架下):

数据准备  模型  训练  测试  可视化 这5大模块

首先看你是用的工具是什么。

如果是用的Jupyter,那么项目模块化是有益的。模块化具体是指每个模块只用存放对应的函数即可,相当于相关的函数装在一个模块里,此时相当于一个容器。在Jupyter中就是每个模块对应一个Cell。而各个模块的使用则在主cell(主函数)中发挥

如果用的IDE,则应该是项目功能化。和项目模块化的区别是什么?在项目功能化中,同样的5个模块,不仅包含有对应的功能函数,还应有对应的主函数代码,即每个模块还会有自身一定的操作。例如TimePrediction项目里的测试模块,不仅有测试函数,而且在该模块里还有主函数调用了测试函数。

对比来看,项目模块化强调主函数对模块内函数的灵活组合,主函数较重要。

项目功能化强调各模块内完成其相应功能,模块较重要。

为什么这样做?由于IDE不像Jupyter那样内核会储存最近一次运行Cell的变量,所以功能最好解耦

比如,如果模型训练和测试一起进行,那么如果测试代码有问题,每次都要等到训练完了才能发现,debug效率极低;同时,如果我只想训练呢?或者我只想测试呢?所以,功能解耦是一个不错的选择。

不过实现模块功能化需要处理模块间的相互联系

当然,也可以两者结合,功能较独立的就功能化(如训练,测试),多被其他功能使用的就模块化(如数据准备)

你可能感兴趣的:(2023-01-09)