rnn 和lstm源码学习笔记

目录

rnn学习笔记

lstm学习笔记


rnn学习笔记

python 复制代码
import torch

def rnn(inputs, state, params):
    # inputs的形状: (时间步数量, 批次大小, 词表大小)
    W_xh, W_hh, b_h, W_hq, b_q = params
    H = state
    outputs = []
    # 遍历每个时间步
    for X in inputs:
        # 计算隐藏状态 H
        H = torch.tanh(torch.mm(X, W_xh) + torch.mm(H, W_hh) + b_h)
        # 计算输出 Y
        Y = torch.mm(H, W_hq) + b_q
        outputs.append(Y)
    # 返回输出和新的隐藏状态
    return torch.cat(outputs, dim=0), (H,)

# 参数示例初始化(根据实际情况调整)
input_size = 10  # 词表大小
hidden_size = 20  # 隐藏层大小
output_size = 5  # 输出大小

# 初始化参数
W_xh = torch.randn(input_size, hidden_size)
W_hh = torch.randn(hidden_size, hidden_size)
b_h = torch.randn(hidden_size)
W_hq = torch.randn(hidden_size, output_size)
b_q = torch.randn(output_size)

params = (W_xh, W_hh, b_h, W_hq, b_q)
state = (torch.zeros(4,hidden_size))

# 输入示例
time_steps = 3
batch_size = 4
inputs = torch.randn(time_steps, batch_size, input_size)

# 调用RNN函数
outputs, new_state = rnn(inputs, state, params)
print(outputs)
print(new_state)

lstm学习笔记

python 复制代码
import torch
import torch.nn as nn

def lstm(inputs, state, params):
    # inputs的形状: (时间步数量, 批次大小, 词表大小)
    W_xi, W_hi, b_i, W_xf, W_hf, b_f, W_xo, W_ho, b_o, W_xc, W_hc, b_c, W_hq, b_q = params
    (H, C) = state
    outputs = []
    # 遍历每个时间步
    for X in inputs:
        I = torch.sigmoid(torch.mm(X, W_xi) + torch.mm(H, W_hi) + b_i)
        F = torch.sigmoid(torch.mm(X, W_xf) + torch.mm(H, W_hf) + b_f)
        O = torch.sigmoid(torch.mm(X, W_xo) + torch.mm(H, W_ho) + b_o)
        C_tilda = torch.tanh(torch.mm(X, W_xc) + torch.mm(H, W_hc) + b_c)

        C = F * C + I * C_tilda
        H = O * torch.tanh(C)

        Y = torch.mm(H, W_hq) + b_q
        outputs.append(Y)
    return torch.cat(outputs, dim=0), (H, C)

# 参数示例初始化(根据实际情况调整)
input_size = 10  # 词表大小
hidden_size = 20  # 隐藏层大小
output_size = 5  # 输出大小

# 初始化参数
W_xi = torch.randn(input_size, hidden_size)
W_hi = torch.randn(hidden_size, hidden_size)
b_i = torch.zeros(hidden_size)
W_xf = torch.randn(input_size, hidden_size)
W_hf = torch.randn(hidden_size, hidden_size)
b_f = torch.zeros(hidden_size)
W_xo = torch.randn(input_size, hidden_size)
W_ho = torch.randn(hidden_size, hidden_size)
b_o = torch.zeros(hidden_size)
W_xc = torch.randn(input_size, hidden_size)
W_hc = torch.randn(hidden_size, hidden_size)
b_c = torch.zeros(hidden_size)
W_hq = torch.randn(hidden_size, output_size)
b_q = torch.zeros(output_size)



# 输入示例
time_steps = 3
batch_size = 4
inputs = torch.randn(time_steps, batch_size, input_size)

params = (W_xi, W_hi, b_i, W_xf, W_hf, b_f, W_xo, W_ho, b_o, W_xc, W_hc, b_c, W_hq, b_q)
state = (torch.zeros(batch_size, hidden_size), torch.zeros(batch_size, hidden_size))  # 初始隐藏状态和单元状态

# 调用LSTM函数
outputs, new_state = lstm(inputs, state, params)
print(outputs)
print(new_state)
相关推荐
张永清-老清26 分钟前
每周读书与学习->初识JMeter 元件(五)
学习·jmeter·性能调优·jmeter性能测试·性能分析·干货分享·每周读书与学习
低音钢琴28 分钟前
【从零开始构建性能测试体系-02】 Apache JMeter 取样器指南:从入门到精通
学习·jmeter·apache
im_AMBER42 分钟前
Web 开发 27
前端·javascript·笔记·后端·学习·web
cimeo1 小时前
【C 学习】12.2-函数补充
学习·c#
微露清风2 小时前
系统性学习C++-第五讲-内存管理
java·c++·学习
Bony-2 小时前
奶茶销售数据分析
人工智能·数据挖掘·数据分析·lstm
小张的博客之旅4 小时前
2025年“羊城杯”网络安全大赛 线上初赛 (WriteUp)
python·学习·网络安全
~无忧花开~5 小时前
JavaScript学习笔记(二十八):JavaScript性能优化全攻略
开发语言·前端·javascript·笔记·学习·性能优化·js
机器学习之心5 小时前
PINN物理信息神经网络风电功率预测!引入物理先验知识嵌入学习的风电功率预测新范式!Matlab实现
神经网络·学习·matlab·风电功率预测·物理信息神经网络
赴3355 小时前
LSTM自然语言处理情感分析项目(四)整合调用各类与方法形成主程序
人工智能·自然语言处理·lstm