0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LSTM隐层神经元结构分析,及应用的程序详细概述

C语言专家集中营 来源:未知 作者:易水寒 2018-07-29 10:06 次阅读

C语言LSTM隐层神经元结构:

LSTM隐层神经元详细结构:

//让程序自己学会是否需要进位,从而学会加法#include "iostream"#include "math.h"#include "stdlib.h"#include "time.h"#include "vector"#include "assert.h"using namespace std;#define innode 2 //输入结点数,将输入2个加数#define hidenode 26 //隐藏结点数,存储“携带位”#define outnode 1 //输出结点数,将输出一个预测数字#define alpha 0.1 //学习速率#define binary_dim 8 //二进制数的最大长度#define randval(high) ( (double)rand() / RAND_MAX * high )#define uniform_plus_minus_one ( (double)( 2.0 * rand() ) / ((double)RAND_MAX + 1.0) - 1.0 ) //均匀随机分布int largest_number = ( pow(2, binary_dim) ); //跟二进制最大长度对应的可以表示的最大十进制数//激活函数double sigmoid(double x) { return 1.0 / (1.0 + exp(-x)); }//激活函数的导数,y为激活函数值double dsigmoid(double y) { return y * (1.0 - y); } //tanh的导数,y为tanh值double dtanh(double y) { y = tanh(y); return 1.0 - y * y; }//将一个10进制整数转换为2进制数void int2binary(int n, int *arr) { int i = 0; while(n) { arr[i++] = n % 2; n /= 2; } while(i < binary_dim)        arr[i++] = 0; }class RNN {public:    RNN();    virtual ~RNN();    void train();public:    double W_I[innode][hidenode];     //连接输入与隐含层单元中输入门的权值矩阵    double U_I[hidenode][hidenode];   //连接上一隐层输出与本隐含层单元中输入门的权值矩阵    double W_F[innode][hidenode];     //连接输入与隐含层单元中遗忘门的权值矩阵    double U_F[hidenode][hidenode];   //连接上一隐含层与本隐含层单元中遗忘门的权值矩阵    double W_O[innode][hidenode];     //连接输入与隐含层单元中遗忘门的权值矩阵    double U_O[hidenode][hidenode];   //连接上一隐含层与现在时刻的隐含层的权值矩阵    double W_G[innode][hidenode];     //用于产生新记忆的权值矩阵    double U_G[hidenode][hidenode];   //用于产生新记忆的权值矩阵    double W_out[hidenode][outnode];  //连接隐层与输出层的权值矩阵    double *x;             //layer 0 输出值,由输入向量直接设定    //double *layer_1;     //layer 1 输出值    double *y;             //layer 2 输出值};void winit(double w[], int n) //权值初始化{    for(int i=0; i I_vector; //输入门 vector F_vector; //遗忘门 vector O_vector; //输出门 vector G_vector; //新记忆 vector S_vector; //状态值 vector h_vector; //输出值 vector y_delta; //保存误差关于输出层的偏导 for(epoch=0; epoch<11000; epoch++)  //训练次数    {        double e = 0.0;  //误差        int predict[binary_dim];               //保存每次生成的预测值        memset(predict, 0, sizeof(predict));        int a_int = (int)randval(largest_number/2.0);  //随机生成一个加数 a        int a[binary_dim];        int2binary(a_int, a);                 //转为二进制数        int b_int = (int)randval(largest_number/2.0);  //随机生成另一个加数 b        int b[binary_dim];        int2binary(b_int, b);                 //转为二进制数        int c_int = a_int + b_int;            //真实的和 c        int c[binary_dim];        int2binary(c_int, c);                 //转为二进制数        //在0时刻是没有之前的隐含层的,所以初始化一个全为0的        double *S = new double[hidenode];     //状态值        double *h = new double[hidenode];     //输出值        for(i=0; i=0 ; p--) { x[0] = a[p]; x[1] = b[p]; //当前隐藏层 double *in_gate = I_vector[p]; //输入门 double *out_gate = O_vector[p]; //输出门 double *forget_gate = F_vector[p]; //遗忘门 double *g_gate = G_vector[p]; //新记忆 double *state = S_vector[p+1]; //状态值 double *h = h_vector[p+1]; //隐层输出值 //前一个隐藏层 double *h_pre = h_vector[p]; double *state_pre = S_vector[p]; for(k=0; k=0; k--) cout << predict[k];            cout << endl;            cout << "true:" ;            for(k=binary_dim-1; k>=0; k--) cout << c[k];            cout << endl;            int out = 0;            for(k=binary_dim-1; k>=0; k--) out += predict[k] * pow(2, k); cout << a_int << " + " << b_int << " = " << out << endl << endl;        }        for(i=0; i

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7528

    浏览量

    128354
  • 程序
    +关注

    关注

    114

    文章

    3630

    浏览量

    79527
  • 神经元
    +关注

    关注

    1

    文章

    284

    浏览量

    18319

原文标题:LSTM神经网络的详细推导与c++实现

文章出处:【微信号:C_Expert,微信公众号:C语言专家集中营】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何诊断容差模拟电路的软故障

    等人1997年提出多层激励函数的量子神经网络,这种量子神经网络是3的网状结构,输入
    发表于 10-12 14:52

    采用单神经元自适应控制高精度空调系统仿真

    采用单神经元自适应控制高精度空调系统仿真摘要:暖通空调领域中的被控对象(空调房间)大多具有大滞后、慢时变、非线性特点,且受各种不确定因素影响,经典控制方法难以实现精确控制。该文正是针对上述实际,将
    发表于 03-18 22:28

    神经网络教程(李亚非)

    神经元  第3章 EBP网络(反向传播算法)  3.1 含的前馈网络的学习规则  3.2 Sigmoid激发函数下的BP算法  3.3 BP网络的训练与测试  3.4 BP算法的改进  3.5 多层
    发表于 03-20 11:32

    0028《PID神经元网络及其控制系统》国防工业出版社-2006.pdf

    =viewthread&tid=287358&fromuid=286650028《PID神经元网络及其控制系统》国防工业出版社-2006.pdf(6M)希望大家多顶顶,提升提升人气。`
    发表于 12-02 09:08

    人工神经网络算法的学习方法与应用实例(pdf彩版)

    `人工神经 网络(Artificial Neural Network,即ANN) 可以概括的定义为:由大量具有适应性的处理元素(神经元)组成的广泛并行互联网络,它的组织能够模拟生物神经系统对真实世界
    发表于 10-23 16:16

    神经模糊控制在SAW压力传感器温度补偿中的应用

    输入矢量,R为输入矢量维数,S1为隐含神经元个数,S2为输出神经元个数,W1为隐含神经元
    发表于 10-24 11:36

    基于BP神经网络的手势识别系统

    的振荡发散,本次选取的BP 神经网络是1 个3 BP 网络结构( 含1 个),单元及输出
    发表于 11-13 16:04

    I2C总线在神经元芯片中的应用

    通过完成一个单字节的写操作向地址指针寄存器写入温度寄存器的地址,然后通过两个字节的读操作从温度寄存器中读取10位温度值。 LONWORKS神经元芯片通过对AD7416进行读写操作的源程序如下
    发表于 12-20 10:57

    【PYNQ-Z2试用体验】神经网络基础知识

    学习和认知科学领域,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。神经网络由大量的人工
    发表于 03-03 22:10

    【案例分享】基于BP算法的前馈神经网络

    期望的输出。BP神经网络算法推导(更新权重和偏倚):从上面推导可以发现:对于任意从神经元i(输出神经元/
    发表于 07-21 04:00

    【案例分享】ART神经网络与SOM神经网络

    的拓扑结构,即将高位空间中相似的样本点映射到网络输出中的邻近神经元。SOM神经网络中的输出神经元
    发表于 07-21 04:30

    什么是LSTM神经网络

    简单理解LSTM神经网络
    发表于 01-28 07:16

    径向基函数神经网络芯片ZISC78电子资料

    概述:ZISC78是由IBM和Sillicon联合研发的一种具有自学习功能的径向基函数神经网络芯片,它内含78个神经元;并且采用并行结构,运行速度与
    发表于 04-07 06:48

    如何去设计一种自适应神经元控制器?求过程

    如何去设计一种自适应神经元控制器?求过程
    发表于 05-17 06:56

    卷积神经网络简介:什么是机器学习?

    大量的二维矩阵。为了实现我们的实际分类目标,我们将二维数据转换为长一维向量。转换是在所谓的扁平中完成的,然后是一个或两个完全连接的。最后两类型的神经元类似于图2所示的
    发表于 02-23 20:11