当前位置: 首页 > news >正文

江苏国龙翔建设有限公司网站备案信息查询

江苏国龙翔建设有限公司网站,备案信息查询,淄博网站建设铭盛信息,wordpress汉化版插件这是史上最简单、清晰#xff0c;最易读的…… C语言编写的 带正向传播、反向传播(Forward ……和Back Propagation#xff09;……任意Nodes数的人工神经元神经网络……。 大一学生、甚至中学生可以读懂。 适合于#xff0c;没学过高数的程序员……照猫画虎编写人工智能、…这是史上最简单、清晰最易读的…… C语言编写的 带正向传播、反向传播(Forward ……和Back Propagation……任意Nodes数的人工神经元神经网络……。 大一学生、甚至中学生可以读懂。 适合于没学过高数的程序员……照猫画虎编写人工智能、深度学习之神经网络梯度下降…… 著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。   “我在网上看到过很多神经网络的实现方法但这一篇是最简单、最清晰的。” 一位来自Umass的华人小哥Along Asong写了篇神经网络入门教程在线代码网站Repl.it联合创始人Amjad Masad看完以后给予如是评价。 // c神经网络手撸20梯度下降22_230820a.cpp : 此文件包含 main 函数。程序执行将在此处开始并结束。 #includeiostream #includevector #includeiomanip //std::setprecision #includesstream //std::getline std::stof()using namespace std; // float Loss误差损失之和001 0.0;class NN神经网络NN {private: int inputNode输入层之节点数s, hidden01Node隐藏层01结点数s, hidden22Nodes, outputNode输出层结点数s;vectorvectorfloat 输入层到第1隐藏层之权重矩阵, 隐藏层1到第二隐藏层2之权重矩阵1to2, 隐藏22到输出层de权重矩阵; //这些变量为矩阵vectorfloat 隐藏层1偏置1, 隐藏层2偏置2, O输出偏置o;vectorfloat隐藏层1数据1, 隐藏层2数据2, 输出数据output;void initLayer每一层的WeightsAndBiases(vectorvectorfloat weights权重, vectorfloat biases偏置){for (size_t i 0; i weights权重.size(); i) {//for110ifor (size_t j 0; j weights权重[0].size(); j) { weights权重[i][j] ((rand() % 2) - 1) / 1.0; }biases偏置[i] ((rand() % 2) - 1) / 1.0;}//for110i}//void initLayerWeightsAndBiases(void initWeightsAndBiases初始化权重和偏置矩阵() {initLayer每一层的WeightsAndBiases(输入层到第1隐藏层之权重矩阵, 隐藏层1偏置1);initLayer每一层的WeightsAndBiases(隐藏层1到第二隐藏层2之权重矩阵1to2, 隐藏层2偏置2);initLayer每一层的WeightsAndBiases(隐藏22到输出层de权重矩阵 , O输出偏置o);}//激活函数-激活的过程vectorfloat activate(const vectorfloat inputs, const vector vectorfloat weights, const vectorfloat biases) {vectorfloat layer_output(weights.size(), 0.0);for (size_t i 0; i weights.size(); i) {for (size_t j 0; j inputs.size(); j) {layer_output[i] inputs[j] * weights[i][j];}//for220jlayer_output[i] biases[i];layer_output[i] sigmoid(layer_output[i]);}//for110ireturn layer_output;}//vectorfloat activate//subtract求差:两个 向量的差std::vectorfloat subtract(const std::vectorfloat a, const std::vectorfloat b) {std::vectorfloat result(a.size(), 0.0);for (size_t i 0; i a.size(); i) {result[i] a[i] - b[i];}return result;}//vectorfloatsubtract//dotT点乘std::vectorfloat dotT(const std::vectorfloat a, const std::vectorstd::vectorfloat b) {std::vectorfloat result(b[0].size(), 0.0);for (size_t i 0; i b[0].size(); i) {for (size_t j 0; j a.size(); j) {result[i] a[j] * b[j][i];}}return result;}//更新权重矩阵s(们), 和偏置(向量)S们void updateWeights(const std::vectorfloat inputs, const std::vectorfloat errors, const std::vectorfloat outputs,std::vectorstd::vectorfloat weights, std::vectorfloat biases, float lr) {for (size_t i 0; i weights.size(); i) {for (size_t j 0; j weights[0].size(); j) {weights[i][j] lr * errors[i] * sigmoid导函数prime(outputs[i]) * inputs[j];}biases[i] lr * errors[i] * sigmoid导函数prime(outputs[i]);}}//void updateWeights(public:NN神经网络NN(int inputNode输入层之节点数s, int hidden01Node隐藏层01结点数s, int hidden22Nodes, int outputNode输出层结点数s):inputNode输入层之节点数s(inputNode输入层之节点数s), hidden01Node隐藏层01结点数s(hidden01Node隐藏层01结点数s), hidden22Nodes(hidden22Nodes), outputNode输出层结点数s(outputNode输出层结点数s){srand(time(NULL));//初始换权重矩阵输入层到第1隐藏层之权重矩阵.resize(hidden01Node隐藏层01结点数s, vectorfloat(inputNode输入层之节点数s));隐藏层1到第二隐藏层2之权重矩阵1to2.resize(hidden22Nodes, vectorfloat(hidden01Node隐藏层01结点数s));隐藏22到输出层de权重矩阵.resize(outputNode输出层结点数s, vectorfloat(hidden22Nodes));//隐藏层1偏置1.resize(hidden01Node隐藏层01结点数s);隐藏层2偏置2.resize(hidden22Nodes);O输出偏置o.resize(outputNode输出层结点数s);initWeightsAndBiases初始化权重和偏置矩阵();}//NN神经网络NN(i//sigmoid激活函数及导数float sigmoid(float x){ return 1.0 / (1.0 exp(-x)); }float sigmoid导函数prime(float x) { return x * (1 - x); }//Forward前向传播vectorfloat predict(const vectorfloat input输入数据) {//用激活函数sigmoid-激活的过程隐藏层1数据1 activate(input输入数据, 输入层到第1隐藏层之权重矩阵, 隐藏层1偏置1); //激活函数// 第一隐藏层到第二隐藏层隐藏层2数据2 activate(隐藏层1数据1, 隐藏层1到第二隐藏层2之权重矩阵1to2, 隐藏层2偏置2);//hidden1, wh1h2, bias_h2);// 第二隐藏层到输出层输出数据output activate(隐藏层2数据2, 隐藏22到输出层de权重矩阵, O输出偏置o);// , wh2o, bias_o);return 输出数据output;}//vectorfloatpredict(// 反向传播//Backpropagationvoid train(const vectorfloat inputs, const vectorfloat target目标数据s, float lr学习率) {vectorfloat output尝试的输出数据s predict(inputs);// 输出层误差vectorfloat output_error输出误差s subtract(target目标数据s, output尝试的输出数据s);//Loss误差损失之和001 0.0;for (int ii 0; ii outputNode输出层结点数s; ii) { Loss误差损失之和001 fabs(output_error输出误差s[ii]); }//// 隐藏层2误差vectorfloat hidden2_errors dotT(output_error输出误差s, 隐藏22到输出层de权重矩阵);// 隐藏层1误差vectorfloat hidden1_errors dotT(hidden2_errors, 隐藏层1到第二隐藏层2之权重矩阵1to2);// 更新权重: 隐藏层2到输出层(的权重矩阵updateWeights(隐藏层2数据2, output_error输出误差s, output尝试的输出数据s, 隐藏22到输出层de权重矩阵, O输出偏置o, lr学习率);// 更新权重: 隐藏层1到隐藏层2updateWeights(隐藏层1数据1, hidden2_errors, 隐藏层2数据2, 隐藏层1到第二隐藏层2之权重矩阵1to2, 隐藏层2偏置2, lr学习率);// 更新权重: 输入层到隐藏层1的权重矩阵updateWeights(inputs, hidden1_errors, 隐藏层1数据1, 输入层到第1隐藏层之权重矩阵, 隐藏层1偏置1, lr学习率);}// void train(// // 反向传播//Backpropagation};//class NN神经网络NN {#define Num训练数据的个数s 5 int main() {NN神经网络NN nn(9, 11, 4, 2);// 11, 10, 4);// Exampleint 训练数据的个数s Num训练数据的个数s;std::vectorfloat input[Num训练数据的个数s];/* input[0] {0,1,0, 0,1,0, 0,1,0}; //1“竖线”或 “1”字{ 1.0, 0.5, 0.25, 0.125 };input[1] { 0,0,0, 1,1,1,0,0,0 }; //-“横线”或 “-”减号{ 1.0, 0.5, 0.25, 0.125 };input[2] { 0,1,0, 1,1,1, 0,1,0 }; //“”加号{ 1.0, 0.5, 0.25, 0.125 };input[3] { 0,1,0, 0,1.2, 0, 0,1, 0 }; // 1或 |字型{ 1.0, 0.5, 0.25, 0.125 };input[4] { 1,1,0, 1,0,1.2, 1,1,1 }; //“口”字型{ 1.0, 0.5, 0.25, 0.125 };std::vectorfloat target[Num训练数据的个数s];target[0] { 1.0, 0,0,0 };// , 0};//1 , 0}; //0.0, 1.0, 0.5}; //{ 0.0, 1.0 };target[1] { 0, 1.0 ,0,0 };// , 0};//- 91.0, 0};// , 0, 0}; //target[2] { 0,0,1.0,0 };// , 0};// 1.0, 0.5};target[3] { 1.0 ,0,0, 0.5 };// , 0}; //1target[4] { 0,0,0,0 };// , 1.0}; //“口”*/vectorfloat target[Num训练数据的个数s];input[0] { 0,0,0, 1,1,1, 0,0,0 }; target[0] { 0, 1 }; //-input[1] { 0,1,0, 0,1,0, 0,1,0 }; target[1] { 1.0, 0 };input[2] { 1,1,1, 0,0,0, 0,0,0 }; target[2] { 0, 0.5 };input[3] { 0,0,1, 0,0,1, 0,0,1 }; target[3] { 0.9, 0 };for (int i 0; i 50000; i) {//for110ifor (int jj 0; jj Num训练数据的个数s - 1; jj) {//for (auto val: input ) {nn.train(input[jj], target[jj], 0.001);if (0 i % 10000) { cout [Lost: Loss误差损失之和001 endl; }}//for220jj}//for110icout endl;//--------------------------------------input[1] { 0,0,0, 1,1, 0.98, 0,0,0 }; //1/ std::vectorfloat outpu输出数据001t nn.predict(input[0]);for (auto val : outpu输出数据001t)std::cout std::fixed std::setprecision(9) val ;cout endl;//-------------------------------------------------------------std::string str0001;do {std::cout std::endl 请输入一个字符串(要求字符串是包含9个由逗号分隔的数字的字符串,如 1,2,0,0,5,0,0,8,9等): std::endl;std::getline(std::cin, str0001);std::stringstream s01s001(str0001);for (int i 0; i 9; i) {std::string temp;std::getline(s01s001, temp, ,);input[1][i] (float)std::stof(temp); // 将字符串转化为整数}std::cout 数字数组为: ;for (int i 0; i 9; i) {std::cout input[1][i] ;}outpu输出数据001t nn.predict(input[1]);std::cout std::endl;for (auto val : outpu输出数据001t)std::cout std::fixed std::setprecision(9) val ;} while (true);// 1 1);//cout Hello World!\n; }//
http://www.yayakq.cn/news/1235/

相关文章:

  • 用asp.net做网站的书苏州手机app开发公司
  • 做网站是什么意思网站建设费计入无形资产
  • 网站如何做等级保护工厂弄个网站做外贸如何
  • wordpress给公司建站百度怎么发布广告
  • 建设网站的源代码自适应主题 wordpress
  • 微网站建设图片学院网站建设情况总结
  • 开源网站有哪些网站套站
  • 深圳做网站公司哪家比较好潍坊建设网站
  • 做网站首页文字排版技巧百度seo优化包含哪几项
  • 受欢迎的集团网站建设网站页脚信息
  • 上海网站设计哪家好发稿媒体平台
  • 关于网站可信备案五金配件店 东莞网站建设
  • 二级网站有什么好处wordpress 分页按钮
  • html5网站提示wordpress图文发布
  • 做塑料的外贸网站有哪些华为 wordpress
  • 番禺网站制作价格线上运营怎么做
  • google网站排名查询电子网站建设的实践目的
  • 北京网站开发周期建站公司兴田德润在哪里
  • 网站优化北京联系电话?如何知道别人的网站流量来自于哪里
  • 织梦搭建商城网站贸易公司网站源码
  • 济南做网站建网站公司裕华区建设局网站
  • 免费视频网站推广软件浙江昆仑建设集团网站
  • 网站打不开 别人能打开短视频营销推广方式
  • 网上做结婚照的网站眉山网站建设兼职
  • 晋城网站建设价格网站建设做一个要多久
  • 江苏 建设 招标有限公司网站wordpress 制作下载
  • 做网站是那个语言写的深度网络科技是干嘛的
  • 广州小企业网站制作阿里巴巴国际站新手入门教程
  • 做网站软件下载手机版杭州seo网络公司
  • 深圳游戏网站开发大连搜索排名提升