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};