资源简介
针对长短期记忆网络(lstm)的算法过程做了详细推导,有具体公式,长达十页,也用matlab对该算法进行了实现,有运行程序和结果图片。
![](http://www.nz998.com/pic/62404.jpg)
代码片段和文件信息
clc;close all;clear
%%训练数据初始化(做二进制加法)
binary_dim = 8;
largest_number = 2^binary_dim - 1;
binary = cell(largest_number 1);
for i = 1:largest_number + 1
binary{i} = dec2bin(i-1 binary_dim);
int2binary{i} = binary{i};
end
%%输入变量初始化
alpha = 0.1;
input_dim = 2;
hidden_dim = 32;
output_dim = 1;
allErr = [];
%% 初始化神经网络权重
%遗忘门 forget_gate = sigmoid(X(t) * X_f + H(t-1) * H_f) 公式5
X_f = 2 * rand(input_dim hidden_dim) - 1;
H_f = 2 * rand(hidden_dim hidden_dim) - 1;
X_f_update = zeros(size(X_f));
H_f_update = zeros(size(H_f));
bf = 2*rand(11) - 1;
bf_update = 0;
% 输入门in_gate = sigmoid(X(t) * X_i + H(t-1) * H_i) 公式6
X_i = 2 * rand(input_dim hidden_dim) - 1;
H_i = 2 * rand(hidden_dim hidden_dim) - 1;
X_i_update = zeros(size(X_i));
H_i_update = zeros(size(H_i));
bi = 2*rand(11) - 1;
bi_update = 0;
%状态门 g_gate = tanh(X(t) * X_g + H(t-1) * H_g) 公式7
X_g = 2 * rand(input_dim hidden_dim) - 1;
H_g = 2 * rand(hidden_dim hidden_dim) - 1;
X_g_update = zeros(size(X_g));
H_g_update = zeros(size(H_g));
bg = 2*rand(11) - 1;
bg_update = 0;
out_para = 2 * rand(hidden_dim output_dim) - 1;
out_para_update = zeros(size(out_para));
% 输出门out_gate = sigmoid(X(t) * X_o + H(t-1) * H_o) 公式9
X_o = 2 * rand(input_dim hidden_dim) - 1;
H_o = 2 * rand(hidden_dim hidden_dim) - 1;
X_o_update = zeros(size(X_o));
H_o_update = zeros(size(H_o));
bo = 2*rand(11) - 1;
bo_update = 0;
% C(t) = C(t-1) .* forget_gate + g_gate .* in_gate 公式8
% S(t) = tanh(C(t)) .* out_gate 公式10
%% 训练
iter = 100000; % 训练次数(1000次为一组,共100组数据)
for j = 1:iter
%计算简单加法 (a + b = c)
a_int = randi(round(largest_number/2)); % 输入十进制
a = int2binary{a_int+1}; % 二进制编码
b_int = randi(floor(largest_number/2)); %输入十进制
b = int2binary{b_int+1}; %二进制编码
% 真实答案
c_int = a_int + b_int; %输入十进制
c = int2binary{c_int+1}; %二进制编码
% 存储答案(二进制编码)
d = zeros(size(c));
% 错误累积
overallError = 0;
% 输出层的差异,即(目标 - 输出)
output_deltas = [];
%计算隐藏层 S(t)
hidden_layer_values = [];
cell_gate_values = [];
% 初始化S(0) 为0向量
hidden_layer_values = [hidden_layer_values; zeros(1 hidden_dim)];
cell_gate_values = [cell_gate_values; zeros(1 hidden_dim)];
%初始化记忆门
% 隐藏层
H = [];
H = [H; zeros(1 hidden_dim)];
% 门细胞
C = [];
C = [C; zeros(1 hidden_dim)];
% 输入门
I = [];
% 遗忘门
F = [];
% 输出门
O = [];
% 状态门
G = [];
% 开始处理序列,即正向传递
% 注意:LSTM单元格的输出是隐藏层,将其转移到预测输出
for position = 0:binary_dim-1
X = [a(binary_dim - position)-‘0‘ b(binary_dim - position)-‘0‘]; % X 输入 大小: 1 x input_dim
y = [c(binary_dim - position)-‘0‘]‘; % y 输出 大小: 1 x output_dim
% 使用公式5-10计算
in_gate = sigmoid(X * X_i + H(end :) * H_i + bi); %公式5
forget_gate = sigmoid(X * X_f + H(end :
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8757 2019-09-09 19:49 LSTM_test.m
文件 1143116 2019-09-09 20:07 贾伟伟_LSTM算法推导过程及代码_1.pdf
文件 22752 2019-09-09 19:48 训练误差.jpg
相关资源
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
- k近邻算法matlab实现
- matlab识别系统
评论
共有 条评论