Autoencoder的C++代码(带注释)。
来源:互联网 发布:win10禁止卸载软件 编辑:程序博客网 时间:2024/05/16 10:44
<span style="font-size:18px;">#include "stdafx.h"#include <iostream>#include "math.h"using namespace std;double d = 0.4;// sigmoid函数double function_g(double x){// e的x次幂double ex = pow(2.718281828,x);return ex/(1+ex);}// 自动编码器的输入double input[4][5] = {{0,0,0,1,1}, {0,0,1,0,1}, {0,1,0,0,1}, {1,0,0,0,1}};// 第一层的权重double edge_1[2][5];// 第二层的权重double edge_2[4][3];// 输入层double first_layer[5];// 隐藏层double hidden_layer[3] = {0,0,1};//输出层double output_layer[4];//计算输入与输出的距离(欧氏距离)double diff(){double ret = 0.0;for(int i=0; i<4; ++i){ret += (output_layer[i]-first_layer[i])*(output_layer[i]-first_layer[i]);}return ret;}// 计算隐含层节点值,隐含层有3个节点,其中一个是1(相当于截距)。void count_second_1(){for(int i=0; i<2; ++i){hidden_layer[i] = 0;for(int j=0; j<5; ++j){hidden_layer[i] += first_layer[j]*edge_1[i][j];}hidden_layer[i] = function_g(hidden_layer[i]);}return;}//计算输出层的输出值void count_last_1(){for(int i=0; i<4; ++i){output_layer[i] = 0;for(int j=0; j<3; ++j){output_layer[i] += hidden_layer[j]*edge_2[i][j];}output_layer[i] = function_g(output_layer[i]);}return;}// 总的重构误差double total_diff(){double ret = 0.0;for(int j=0; j<4; ++j){for(int i=0; i<5; ++i){first_layer[i] = input[j][i];}count_second_1();count_last_1();ret += diff();}return ret;}int main(void){// 初始化第一层的权重for(int i=0; i<2; ++i){for(int j=0; j<5; ++j){edge_1[i][j] = ((i+j)%4+0.1)/10;}}// 初始化第二层的权重for(int i=0; i<4; ++i){for(int j=0; j<3; ++j){edge_2[i][j] = ((i+j)%4+0.1)/10;}}for(int i=0; i<40000; ++i){double origin_diff = total_diff();double direction_1[2][5],direction_2[4][3];for(int i=0; i<2; i++){for(int j=0; j<5; ++j){double tmp = edge_1[i][j];// 调整第一层的权值edge_1[i][j] += d * origin_diff;// 计算隐含层的输出count_second_1();// 输出层的输出count_last_1();// 计算输入层和输出层的误差double diff2 = total_diff();// 计算修改的权重和之前的差,用来进一步调节权重direction_1[i][j] = origin_diff-diff2;// 还原权重值,为了下面调节权重做准备。edge_1[i][j] = tmp;}}for(int i=0; i<4; ++i){for(int j=0; j<3; ++j){double tmp = edge_2[i][j];edge_2[i][j] += d*origin_diff;count_second_1();count_last_1();double diff2 = total_diff();direction_2[i][j] = origin_diff -diff2;edge_2[i][j] = tmp;}}for(int i=0; i<2; ++i){for(int j=0; j<5; ++j){edge_1[i][j] += d*origin_diff*direction_1[i][j];}}for(int i=0; i<4; ++i){for(int j=0; j<3; ++j){edge_2[i][j] += d*origin_diff*direction_2[i][j];}}double d= 0.0;d = total_diff();cout << "diff_sum: " << d << endl;}}</span>
0 0
- Autoencoder的C++代码(带注释)。
- UDP传输的java代码(带详细注释)
- 修改C/C++的单行注释(//)为多行注释(/**/)的Perl代码
- android线程实现:实时显示所连接的wifi信号强度(代码带注释)
- PageRank的Java代码实现及图形操作(带详细注释)!
- 规范化的代码。。带注释,求大神点评
- freetype->example1.c代码的注释
- Java 删除c/c++/java代码注释的代码片段
- 我的vim配置(带注释)
- 轮播图的实现(带详细注释)
- 带注释的Servlet
- pdflush.c代码注释
- Objective-C代码注释
- C之代码注释
- MSDN:C#(.NET)自带的图像压缩代码
- C#,arcengine制作鹰眼全过程(带注释)
- 八皇后 c语言递归实现方法(带注释)
- vimrc(带注释)
- 公司的耍流氓行为,你知道几个?
- Ubuntu 14.04下Openface的环境搭建
- VB热身:走进VBA&Excel高级应用
- 全文索引----配置solr数据源
- JavaScript函数表达式和闭包
- Autoencoder的C++代码(带注释)。
- python&&CMD
- Java问题探讨之中Comparable 和 Comparator
- Seating On Bus
- C# 关闭登录窗体,进入主窗体后,主窗体关闭,程序进程仍在运行的问题
- OJ:ytu1021:按要求输出
- java中的匿名内部类总结
- Java.lang.NoSuchMethodException
- Java内存模型