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

    文章

    7604

    浏览量

    136711
  • 程序
    +关注

    关注

    117

    文章

    3785

    浏览量

    81009
  • 神经元
    +关注

    关注

    1

    文章

    363

    浏览量

    18449

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

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

收藏 人收藏

    评论

    相关推荐

    神经网络教程(李亚非)

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

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

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

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

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

    模糊控制与神经网络的资料总结

    如图所示拓扑结构的单前馈网络,一般称为三前馈网或三感知器,即:输入、中间层(也称
    发表于 03-01 10:09 17次下载
    模糊控制与<b class='flag-5'>神经</b>网络的资料总结

    神经元 C 参考指南

    神经元 C 参考指南
    发表于 07-04 20:48 0次下载
    <b class='flag-5'>神经元</b> C 参考指南

    神经元的信息传递方式是什么

    神经元神经系统的基本单位,它们通过电信号和化学信号的方式进行信息传递。 神经元的信息传递方式 神经元结构和功能
    的头像 发表于 07-03 11:27 1231次阅读

    神经元的基本作用是什么信息

    神经元神经系统的基本功能单位,它们在大脑、脊髓和周围神经系统中发挥着至关重要的作用。神经元的基本作用是接收、处理和传递信息。本文将详细介绍
    的头像 发表于 07-03 11:29 884次阅读

    神经元结构及功能是什么

    神经元神经系统的基本结构和功能单位,它们通过电信号和化学信号进行信息传递和处理。神经元结构和功能非常复杂,涉及到许多不同的方面。 一、
    的头像 发表于 07-03 11:33 1224次阅读

    神经元的分类包括哪些

    )是神经系统的基本功能单位,是一种高度分化的细胞,具有接收、传递和处理信息的能力。神经元通过电信号和化学信号进行信息传递和处理,是神经系统中最重要的细胞类型。 1.2 神经元
    的头像 发表于 07-03 11:36 1214次阅读

    神经网络三结构的作用是什么

    网络的三结构是最基本的神经网络结构,包括输入、隐藏和输出。下面介绍
    的头像 发表于 07-11 11:03 828次阅读

    人工智能神经元的基本结构

    ,旨在创建能够执行通常需要人类智能的任务的计算机系统。神经元是构成人脑的基本单元,也是人工智能研究的基础。本文将详细介绍人工智能神经元的基本结构
    的头像 发表于 07-11 11:19 1336次阅读

    生物神经元模型包含哪些元素

    生物神经元模型是神经科学和人工智能领域中的一个重要研究方向,它旨在模拟生物神经元的工作原理,以实现对生物神经系统的理解和模拟。 神经元的基本
    的头像 发表于 07-11 11:21 1001次阅读

    人工神经元模型的基本构成要素

    ,它能够接收、处理和传递信息。在人工神经元模型中,神经元的基本结构包括输入、输出和激活函数。 1.1 输入 神经元的输入是一组数值,通常用向量表示。这些数值可以是特征值、像素值等,它们
    的头像 发表于 07-11 11:28 1248次阅读

    神经元是什么?神经元神经系统中的作用

    神经元,又称神经细胞,是神经系统的基本结构和功能单位。它们负责接收、整合、传导和传递信息,从而参与和调控神经系统的各种活动。
    的头像 发表于 07-12 11:49 1212次阅读
    <b class='flag-5'>神经元</b>是什么?<b class='flag-5'>神经元</b>在<b class='flag-5'>神经</b>系统中的作用

    LSTM神经网络的结构与工作机制

    网络的结构与工作机制的介绍: 一、LSTM神经网络的结构 LSTM神经网络的
    的头像 发表于 11-13 10:05 329次阅读