三层BP神经网络C语言代码
简介
本仓库提供了一个用C语言编写的三层BP神经网络代码,适用于分类问题的训练和测试。代码使用fisheriris数据集进行训练和测试,但也可以用于其他分类问题。该神经网络包含一个输入层、一个隐藏层和一个输出层,各层的节点数均可自定义设置。
主要功能
- 数据归一化:
- 属性数据采用Z-score算法进行归一化。
- 标签数据采用Min-Max算法进行归一化。
- 激活函数:
- 采用Sigmoid函数作为激活函数。
- 核心代码:
BPNN.c
和BPNN.h
中包含了BP神经网络的核心代码:bpnn_Train
函数用于训练网络。bpnn_predict
函数用于预测测试数据。bpnn_FileOutput
函数用于输出网络参数和模型至文件。bpnn_LoadModel
函数用于加载网络模型。
- 测试代码:
main.c
中包含了两个测试函数:- 测试读取训练数据
train.data
,训练网络,输出网络参数bpnn_out.txt
和模型bpnn.bin
。 - 读取测试数据
test.data
,输出测试结果test_out.txt
。
- 测试读取训练数据
使用说明
- 编译与运行:
- 使用C语言编译器编译
BPNN.c
和main.c
文件。 - 运行生成的可执行文件,按照提示输入训练数据和测试数据的路径。
- 使用C语言编译器编译
- 数据格式:
- 训练数据和测试数据应按照指定格式存储在文件中,具体格式请参考
train.data
和test.data
文件。
- 训练数据和测试数据应按照指定格式存储在文件中,具体格式请参考
- 输出结果:
- 训练完成后,网络参数和模型将输出到
bpnn_out.txt
和bpnn.bin
文件中。 - 测试完成后,测试结果将输出到
test_out.txt
文件中。
- 训练完成后,网络参数和模型将输出到
相关公式推导
关于BP神经网络的公式推导,请参考我的博客文章。
注意事项
- 确保输入数据的格式正确,否则可能导致程序运行错误。
- 可以根据实际需求调整各层的节点数和训练参数。
贡献
欢迎提交问题和改进建议,共同完善本项目。