• 大小: 485KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Matlab
  • 标签: lstm  matlab  

资源简介

针对长短期记忆网络(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

评论

共有 条评论