计算化学公社

标题: Linux下利用PyTorch对回归与分类任务进行深度学习的脚本 [打印本页]

作者
Author:
冰释之川    时间: 2022-12-15 20:09
标题: Linux下利用PyTorch对回归与分类任务进行深度学习的脚本
本帖最后由 冰释之川 于 2022-12-30 18:04 编辑

相关机器学习的帖子:

Linux下Scikit-learn机器学习实例脚本》(http://bbs.keinsci.com/thread-30547-1-1.html
Linux下利用SHAP对机器学习模型进行合理解释》(http://bbs.keinsci.com/thread-30780-1-1.html

本文简单介绍了如何利用PyTorch进行神经网络建模与训练,这里感谢mizu-bai同学提供的PIP-NN训练教程(https://github.com/mizu-bai/PIP-NN-PyTorch-Tutorial)

本脚本将涉及到如下几个方面的代码编写与应用(以回归任务为例):
(1)神经网络在PyTorch中的定义(涉及到python中的class概念)
(2)将初始的Dataframe架构的数据转换成DataLoader可识别的格式
(3)数据的缩放(利用scikit-learn包辅助实现)
(4)神经网络训练过程与验证过程
(5)交叉验证策略的实现形式(数据集划分部分利用scikit-learn包辅助实现)
(6)最佳模型的保存与加载
(7)回归模型的常用评价指标(利用scikit-learn包辅助实现)



一、脚本依赖包清单
(, 下载次数 Times of downloads: 75)


二、在PyTorch中定义神经网络
(, 下载次数 Times of downloads: 75)
__init__函数初始化神经网络,其中num_features代表数据集里输入变量X的维度(总特征数量)
forward()函数用于调用__init__中的layer_stack对象,输出预测的y值


三、在PyTorch中进行数据集格式转换
(, 下载次数 Times of downloads: 73)
在这里我提供的数据集的初始格式为DataFrame和Series,利用该class对数据格式进行转换,使之适应PyTorch中的DataLoader工具

四、数据缩放
(, 下载次数 Times of downloads: 77)
数据处理是整个深度学习的一个重要的组成部分,这里简单示范一下如何对所有的X特征量进行缩放。
缩放的时候要注意的一点是:对scaler进行拟合的时候一定一定要用训练集数据(不要用训练+测试整个数据集),以防数据泄露,使得最终建立的模型表现过于乐观。
然后利用transform()方法分别对训练集与测试集进行缩放


五、数据分割
(, 下载次数 Times of downloads: 71)


六、神经网络训练过程
(, 下载次数 Times of downloads: 72)
(, 下载次数 Times of downloads: 80)
这里预先定义了损失函数,优化器算法以及利用ReduceLROnPlateau对学习率进行自动调控
红框子里的5行代码是核心代码,分别代表(1)计算预测值; (2)计算损失函数;(3)对优化器上一轮保留的梯度信息进行清零;(4)计算梯度并进行反向传播; (5)根据梯度来更新权重参数

七、神经网络验证过程
(, 下载次数 Times of downloads: 71)
验证过程相对比较简单,利用model.eval()切换到验证模式,然后为了节约计算时间,关闭验证过程中的梯度计算功能,最后得到验证集下的损失函数值

八、利用训练集对模型进行K折交叉验证
(, 下载次数 Times of downloads: 79)
交叉验证是充分利用训练集进行机器学习一种常用策略,这里借用scikit-learn包里的工具对训练集进行划分,然后对计算的损失函数值进行平均
不了解交叉验证的同学,参看下面的简介后肯定秒懂了
(, 下载次数 Times of downloads: 71)

九、利用测试集对最佳的神经网络模型进行泛化能力评估
(, 下载次数 Times of downloads: 74)
最后对最佳的模型(所有Epoch中平均loss最低的Epoch对应的模型)进行进行泛化能力评估,主要衡量指标为 MSE, MAE,以及R方

最后附上脚本运行过程的输出信息作为参考:
(, 下载次数 Times of downloads: 90)


脚本与数据集下载:
(, 下载次数 Times of downloads: 144) (2022.12.30 更新)





作者
Author:
luwis    时间: 2022-12-17 03:35

作者
Author:
冰释之川    时间: 2022-12-17 07:40
本帖最后由 冰释之川 于 2022-12-17 09:41 编辑
luwis 发表于 2022-12-17 03:35
**** 本内容被作者隐藏 ****

脚本里自动判断是否有cuda,有的话直接启用gpu了才对。我一会再检查一下问题所在,感谢反馈bug
作者
Author:
冰释之川    时间: 2022-12-17 10:20
luwis 发表于 2022-12-17 03:35
**** 本内容被作者隐藏 ****

bug已修复,请下载最新版
作者
Author:
luwis    时间: 2022-12-17 11:01
冰释之川 发表于 2022-12-17 10:20
bug已修复,请下载最新版

测试成功。谢谢冰大佬。
感觉不搞机器学习,就是错过了一个时代。
我的困惑是,我能力最多是跟随应用,做不多啥有价值的东西。
冰大佬,请您说说机器学习的不足主要在哪些方面?如果想搞机器学习的话,我们在哪些方面喝点汤?
大家都来说说呗。谢谢!
作者
Author:
红米饭1234    时间: 2022-12-18 15:10
太厉害了,学习了!
作者
Author:
xvguang    时间: 2023-1-12 14:36
我是真想好好学习啊
作者
Author:
madhatter    时间: 2023-1-20 15:10
有个疑问,学校有matlab最近有沙龙教学用matlab 做机器学习,想问下如果使用matlab的机器学习能否达到一些高通量  筛选之类的计算
作者
Author:
冰释之川    时间: 2023-1-20 17:51
madhatter 发表于 2023-1-20 15:10
有个疑问,学校有matlab最近有沙龙教学用matlab 做机器学习,想问下如果使用matlab的机器学习能否达到一些 ...

没用过MATLAB,不过只要顺手,都能进行批量计算




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3