使用C++实现的简单ANN(人工神经网络)
使用C++实现的简单ANN(人工神经网络)
github地址
使用C++实现的最简单的人工神经网络,包含梯度下降的反向传播算法(BP)。内有部分注释,适合初学学习。至于为什么不用python?还是觉得从最底层(矩阵运算)写比较能加深印象和对算法的理解。(绝对不是因为我不会写python)
警告,此代码仅为初学学习之用,请勿用作任何工程项目!
一、跑起来
方式一
使用vscode+cmake插件或者Clion打开目录。然后直接编译运行。
方式二
1、确保安装cmake环境,没有请先装cmake。 2、在工程目录下键入:
1 |
|
3、运行build目录下的ANN程序
然后在data目录下生成文件output.csv,这是一个回归函数
二、用起来
1、使用十分简便,首先新建ANN模型,设置误差函数cost及其对于输出层每一项的偏导,这里使用默认的平方差函数
1
2
3ANNModel model;
model.cost = Sqrt_Cost_Func::sqrt_cost;
model.d_cost = Sqrt_Cost_Func::d_sqrt_cost;1
model.learning_rate = 0.01;
1 |
|
3、编译模型 1
Compiled_ANNModel compiled_model = model.compile();
4、训练模型,查看输出 1
2Vector data, expectation;
Vector output = compiled_model.feed(data, expectation);
5、只输出,不训练 1
Vector output = compiled_model.get_output(data);
三、学起来
这里给出最终公式,公式的推导请见其他教程、参考书。
1、获得神经元的激活值,这里使用
2、反向传播公式(以平方差误差函数为例)
其中
最终有
最后对
其中,
具体实现的解释请,见代码注释。