C语言实现RNN的前向推理——实现手写数字识别

1.循环神经网络

  循环神经网络的单个神经元模型如下图所示,与以往的神经元相比它包含了一个反馈输入,如果将其按照时间变化展开可以看到循环神经网络单个神经元类似一系列权值共享前馈神经元的依次连接,连接后同传统神经元相同随着时间的变化输入和输出会发生变化,但不同的是循环神经网络上一时刻神经元的“历史信息”会通过权值与下一时刻的神经元相连接,这样循环神经网络在 t 时刻的输入完成与输出的映射且参考了 t 之前所有输入数据对网络的影响,形成了反馈网络结构。虽然反馈结构的循环神经网络能够参考背景信号但常见的信号所需要参考的背景信息与目标信息时间相隔可能非常的宽泛,理论上循环神经网络可以参考距离背景信息任意范围的参考信息,但实际应用过程中对于较长时间间隔的参考信息通常无法参考。
在这里插入图片描述

2.循环神经网络计算过程

隐藏状态在t时间计算公式:
h_t = tanh(W_{ih} x_t + b_{ih} + W_{hh} h_{(t-1)} + b_{hh})
在这里插入图片描述

3.C语言实现

  RNN三层循环,第一层表示计算第t个时间节点,第二、三层为每个时间节点的运算。

#include <stdio.h>
#include <math.h>
#include "./inc/include.h"

int rnn(float *img_pixels, float *weight_ih_l_1,float *weight_hh_l_1,float *bias_ih_l_1,float *bias_hh_l_1,
        float *weight_ih_l2,float *weight_hh_l2,float *bias_ih_l2,float *bias_hh_l2,
        float *fcLayer_weight, float *fcLayer_bais)
{
   
    float temp = 0.0;
    int ret=0;
    float out1[HIDDEN_SIZE*INPUT];
    float out2[HIDDEN_SIZE*INPUT];
    float out3[INPUT];
    float h[NUM_LAYERS*HIDDEN_SIZE*INPUT] = {
   0.0};
    
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值