使用CNN进行回归预测代码(Python版-使用pytorch框架)
最后更新于:2024-05-30 22:33:21
-使用波士顿房价预测作为演示案例。
-可以自由设置神经网络卷积层结构、池化层结构
-可以快速划分训练集、验证集、测试集
-程序运行完后自动绘制出收敛过程、训练集和测试集的预测结果对比、相对误差图、MAE/MSE/MAPE/RMSE/R等指标
-多种训练参数可设置,包括求解器、迭代次数、初始学习率等等
-可设置随机种子,保证每次运行结果保持一致
–需要你做的基本只有导入数据和调参。
–绝大多数流程都被封装固化到函数中,仿照案例导入你的数据即刻得到结果~
一、代码运行环境
运行环境推荐为:VSCode+Anaconda+Pytorch+CUDA,配置教程见此处。
如果按照上述环境配置,则代码基本可以下载即用。
如果使用你的现有环境,需要安装依赖的包,这个可以根据代码运行时的报错内容判断和安装。
建议大家使用推荐环境。
二、程序介绍

程序文件
1.demoCNNreg_housing.py
使用波士顿城郊区域的房价数据集进行回归预测的案例,其中演示了khCNNreg.py文件中FunRegCNNs函数的应用方式示范。
文件可以直接运行。程序运行完成后,将会画出如下图像:

收敛过程图

训练集拟合结果对比图

测试集预测结果对比图

训练集预测结果相对误差

测试集预测结果相对误差

网络结构图
在命令行窗口还会打印出以下内容:

训练过程数据

MAE/MSE/MAPE/RMSE/R等指标
2.khCNNreg.py文件
使用CNN进行模式识别(分类)的快速实现的库文件,其中包含了FunRegCNNs函数,该函数的说明如下:
def FunRegCNNs(dataX, dataY, divideR, cLayer, poolingLayer, fcLayer, options, setting):
"""
使用CNN进行回归预测的快速实现函数
参数:
- dataX: 输入数据,形状为(num_samples, num_channels, height, width)的numpy数组
- dataY: 输出结果,考虑可以为多维的numpy数组
- divideR: 数据集划分比例,形如[train_ratio, val_ratio, test_ratio]的列表
- cLayer: 卷积层结构,形状为(num_conv_layers, 5)的numpy数组,每一行代表一个卷积层的参数[filter_height, filter_width, num_filters, stride, padding]
- poolingLayer: 池化层结构,形状为(num_conv_layers, 5)的列表,每一行代表一个池化层的参数['pool_type', pool_height, pool_width, stride, padding],其中pool_type可以是'maxPooling2dLayer'或'averagePooling2dLayer'或'none'
- fcLayer: 全连接层结构,形状为(num_fc_layers,)的列表,每一个元素代表一个全连接层的输出维度,如果为空列表则只有一个输出维度等于1的全连接层
- options: 网络训练相关的选项,字典类型,包含以下键值对:
- 'solverName': 优化器类型,可以是'sgdm'或'rmsprop'或'adam',默认为'adam'
- 'MaxEpochs': 最大迭代次数,默认为30
- 'MiniBatchSize': 批量大小,默认为128
- 'InitialLearnRate': 初始学习率,默认为0.005
- 'ValidationFrequency': 验证频率,即每多少次迭代进行一次验证,默认为50
- 'LearnRateSchedule': 学习率调度方式,可以是'piecewise'或'none',默认为'none'
- 'LearnRateDropPeriod': 学习率下降周期,默认为10
- 'LearnRateDropFactor': 学习率下降因子,默认为0.95
- setting: 其他选项,字典类型,包含以下键值对:
- figflag: 是否绘制图像,'on'为绘制,'off'为不绘制
- deviceSel: 训练设备选择,可以是'cpu'或'gpu',默认为'gpu',当设置为'gpu'时,如果gpu硬件不可用,则会自动切换到cpu
- seed: 随机种子,整数,设置为0时不启用,设置为其他整数时启用,不同的整数为不同的种子值,变换种子值会影响结果,相同种子的计算结果是一致的,缺省时为不设置随机种子
- minmax: 是否进行归一化,布尔值,默认为True
返回值:
- foreData: 测试集的回归预测结果
- foreDataTrain: 训练集的回归预测结果
- model: 训练好的PyTorch模型
- info: 包含训练过程中的损失和准确率信息的字典
"""
3.torchview文件夹
绘制网络结构图依赖的文件。
三、快速开始
1.环境配置
1.1 运行环境推荐为:VSCode+Anaconda+Pytorch+CUDA,配置教程见此处。
1.2 在配置好上述环境后,还需要安装以下包:
pip install graphviz
1.3 另外,为了正确绘制混淆矩阵图,需要执行以下代码实现matplotlib的降级。
conda install matplotlib=3.7.2
1.4 点击这个链接,下载graphviz的安装包。
运行安装包,点击下一步。

点击接受。

注意!这步要选第二项:Add Graphviz to the system PATH for all users

选择一个路径进行安装。

安装完之后重启电脑。
至此环境配置完成。
2.运行测试脚本
先在vscode里打开下载好的文件夹,然后运行demoCNNreg_housing.py程序,程序运行完毕后如果没报错,且正常画出上述图像,则说明运行环境正常,程序正确。
3.替换成你自己的数据
复制一个demoCNNreg_housing.py的文件副本,这些demo文件的第一节都是加载数据集,第二节是将数据提取出输入变量和输出变量,注意输入变量需要转换为四维数据,这个在演示案例中有演示,如果你搞不定的话,购买完整版代码的同学可以找售后帮忙。
数据替换完成后点击运行即可。
剩下的就是调参了,调参是一个相对比较花费时间的事情,需要一定耐心。
四、关于完整版与公开版代码
功能 | 完整版 | 公开版 |
数据导入、参数设置、实现分类 | √ | √ |
软件全部源码(py文件) | √ | × |
预测结果等图片无水印,可绘制网络结构图 | √ | × |
最大迭代次数 | 不限制 | 5 |
最大卷积层层数 | 不限制 | 2 |
导出预测准确度、训练好的网络模型、神经网络训练相关参数(如loss值)等 | 可导出 | 不可导出 |
五、获取公开版程序(需使用电脑浏览器打开)
CNN回归预测python公开版代码
注:公开版代码需使用Python3.11版本的conda
六、获取完整版程序(使用电脑浏览器或者手机浏览器打开)
获取通道一(淘宝):点击此处获取完整版程序
获取通道二(本页面):点击下面“立即支付”按钮,付款后获取完整版代码下载链接和售后联系方式~本通道处于测试阶段,使用该通道可以额外优惠(仅需69.5元)。付款完成后刷新一下本页面即可看到下载链接。
(注意支付跳转失败的话,请使用浏览器打开本页面)
七、完整版代码重要更新
20240530 完成初版代码
八、常见问题
Q1:报错:DLL load failed while importing khCNNreg: 找不到指定的模块。
A1:原因是对于公开版代码,需要将当前的Python版本设定为3.11。使用以下步骤:
1.卸载你现在安装的anaconda,重启电脑。