资源简介
针对长短期记忆网络(lstm)的算法过程做了详细推导,有具体公式,长达十页,也用matlab对该算法进行了实现,有运行程序和结果图片。
代码片段和文件信息
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
相关资源
- LSTM-regression-master.zip
- 一维高斯随机粗糙面建模.zip
- 贝叶斯分类Matlab代码
- Matlab差分阈值法标记小波变换软阈值
- l利用matlab进行图像纹理特征提取
- 平面钢架问题求解MATLAB
-
Matlab下Simuli
nk搭建单轮四分之一车辆 - matlab-m语言-编程实现随机树算法实现
-
simuli
nk电弧模型 - 电力系统可靠性评估matlab编程
- 加注释完整CEEMD程序的matlab代码
- Sigma Delta ADC matlab全系统仿真.zip
- 基于椭圆雷达定位的matlab仿真
- 车辆ABS系统滑移率Bang-Bang、PID控制模
- 列车追踪间隔距离仿真
- MATLAB多种改进直方图均衡化
- 双边滤波图像处理方法MATLAB程序
- MATLAB:图像旋转与插值
- 模糊C均值聚类算法
- matlab整流电路
- matlab画雷达图
- matlab心电信号滤波R波提取
- FBG反射谱透射率的MATlab仿真,基于耦
- matlab2016
- 第二版 PDF 李国勇智能预测控制及其
- 基于matlab的PLL锁相环
-
MATLAB/Simuli
nk控制论电弧仿真模型 接 - 合成孔径雷达的BP成像算法
- matlab互信息法求延迟时间
- 动态NSGA-II算法matlab代码
评论
共有 条评论