人工智能(Pytorch)搭建LSTM网络实现简单案例
创始人
2025-05-28 14:03:58
0

 本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052

目录

一、Pytorch搭建神经网络的简单步骤

二、LSTM网络

三、Pytorch搭建LSTM网络的代码实战

 一、Pytorch搭建神经网络

PyTorch是一个基于Python的深度学习框架,提供了自动求导机制、强大的GPU支持和动态图等特性。PyTorch搭建神经网络的一般步骤

1.导入必要的库和数据

import torch
import torch.nn as nn
import torch.optim as optim# 加载数据并进行预处理
train_data = ...
test_data = ...

2.定义神经网络模型

# 建立Net网络
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(784, 256)  # 输入层到隐藏层self.fc2 = nn.Linear(256, 10)   # 隐藏层到输出层def forward(self, x):x = x.view(-1, 784)        # 将样本拉平成一维向量x = nn.functional.relu(self.fc1(x))x = self.fc2(x)return xnet = Net()

3.定义损失函数和优化器

 # 使用交叉熵作为损失函数,适合分类问题
criterion = nn.CrossEntropyLoss()   # 使用随机梯度下降进行参数优化
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)    

4.训练模型

num_epochs =10 # 训练次数for epoch in range(num_epochs):for i, data in enumerate(train_loader, 0):inputs, labels = dataoptimizer.zero_grad()outputs = net(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()

5.测试模型

correct = 0
total = 0
with torch.no_grad():for data in test_loader:images, labels = dataoutputs = net(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total)

PyTorch搭建神经网络的具体步骤都是按照以上模板进行搭建的,大家可以记住以上步骤。

二、LSTM网络

LSTM网络是一种特殊的循环神经网络,它能够学习处理序列中的长期依赖性,而不会受到梯度消失或梯度爆炸的影响。LSTM中的关键组成部分是门控机制,它允许网络选择性地丢弃或保留信息。每个门控单元都包括一个sigmoid激活函数和一个逐元素乘积。

LSTM的内部状态由三个向量组成:记忆细胞状态c_t、隐藏状态h_t和输入x_t。在每个时间步t,LSTM接收输入x_t​和前一个时刻的记忆状态c_{t-1}和隐藏状态h_{t-1}​。然后,它使用门控机制来计算以下内容:

 1.遗忘门f_t:决定从前一个时间步的记忆状态中删除哪些信息。

f_t =\sigma (W_F[h_{t-1},x_t]+b_f)

其中W_fb_f是遗忘门的权重和偏差,\sigma是sigmoid激活函数。

 2.输入门i_t:决定将哪些新信息添加到记忆状态中。

i_t = \sigma(W_i [h_{t-1}, x_t] + b_i)

 3.候选记忆状态\widetilde{c}_t:包括新的候选信息。

\widetilde{c}_t = \tanh(W_c [h_{t-1}, x_t] + b_c)

 4.更新记忆状态c_t:根据遗忘门、输入门和候选记忆状态更新记忆状态

c_t = f_t \odot c_{t-1} + i_t \odot \widetilde{c}_t

其中⊙表示逐元素乘积。

 5.输出门o_t:决定从记忆状态中输出哪些信息。

o_t = \sigma(W_o [h_{t-1}, x_t] + b_o)

 6.隐藏状态h_t:根据输出门和记忆状态计算隐藏状态。

h_t = o_t \odot \tanh(c_t)

LSTM通过门控机制实现了选择性地保留或丢弃信息,从而学习处理长序列的能力。在训练过程中,LSTM网络通过反向传播算法自动调整门控单元的参数,使其能够更好地适应数据。

三、Pytorch搭建LSTM网络的代码实战

import torch
import torch.nn as nnclass LSTM(nn.Module):def __init__(self, input_size, hidden_size, num_layers, output_size):super().__init__()self.hidden_size = hidden_sizeself.num_layers = num_layersself.lstm = nn.LSTM(input_size, hidden_size, num_layers)self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):h0 = torch.zeros(self.num_layers, x.size(1), self.hidden_size).to(x.device)c0 = torch.zeros(self.num_layers, x.size(1), self.hidden_size).to(x.device)out, _ = self.lstm(x, (h0, c0))out = self.fc(out[-1, :, :])return out# 准备数据
input_size = 10   # 输入特征数
hidden_size = 20  # 隐藏层特征数
num_layers = 2    # LSTM层数
output_size = 2   # 输出类别数
batch_size = 3    # 批大小
sequence_length = 5  # 序列长度# 随机生成一些数据
x = torch.randn(sequence_length, batch_size, input_size)
y = torch.randint(output_size, (batch_size,))# 定义优化器和损失函数
model = LSTM(input_size, hidden_size, num_layers, output_size)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)# 开始训练
num_epochs = 100
for epoch in range(num_epochs):outputs = model(x)loss = criterion(outputs, y)optimizer.zero_grad()loss.backward()optimizer.step()if (epoch+1) % 10 == 0:print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))# 预测新数据
with torch.no_grad():test_x = torch.randn(sequence_length, batch_size, input_size)outputs = model(test_x)_, predicted = torch.max(outputs.data, 1)print(predicted)

运行结果:

Epoch [10/100], Loss: 0.0209
Epoch [20/100], Loss: 0.0007
Epoch [30/100], Loss: 0.0002
Epoch [40/100], Loss: 0.0002
Epoch [50/100], Loss: 0.0001
Epoch [60/100], Loss: 0.0001
Epoch [70/100], Loss: 0.0001
Epoch [80/100], Loss: 0.0001
Epoch [90/100], Loss: 0.0001
Epoch [100/100], Loss: 0.0001
tensor([0, 0, 0])Process finished with exit code 0

相关内容

热门资讯

少儿美术老师简历 少儿美术老师简历  时光在流逝,从不停歇,迎接我们的将是新的工作机会,新的`挑战,这时是不是该好好写...
个性简历封面图片(2)   这是中国人才网个人简历频道小编为你提供个性简历封面图片,可以右击另存为桌面,即可下载使用,我们会...
医学研究生个人简历 医学研究生个人简历(通用5篇)  时光在流逝,从不停歇,相信很多朋友又忙着找工作呢吧,现在的你想必是...
简历个人简介怎么写 简历个人简介怎么写  个人简历也称为个人履历,是指求职者在求取或是转换工作岗位时向用人单位证明自己工...
品管员个人简历 品管员个人简历  个人信息  性别:男  年龄:42岁民族:汉族  工作经验:10年以上居住地:浙江...
简历封面背景图片素材下载 简历封面背景图片素材下载  传统的个人简历虽然说比较没有什么新意,但是也是非常实用的一种简历。当然也...
个人简历专业实践经历 个人简历专业实践经历范文一2001.1-至今:某软件公司 | 行政人事部部长 | 北京制定公司的管理...
求职自荐书 求职自荐书范文  以下是由unjs小编为大家推荐的求职自荐书范文,欢迎大家借阅参考,求职自荐书范文。...
程序员简历 程序员简历15篇  光阴迅速,一眨眼就过去了,眼见着,找工作的时间马上到来,你的简历写好了吗?简历怎...
简历制作不要暴露你的求职动机 简历制作不要暴露你的求职动机  或是抱着学习的目的,或是为了优厚待遇,或是冲着企业名声,以上这些,无...
投简历邮件正文怎么写   现在很多用人单位都会要求求职者通过邮件投递简历的,那么,投简历邮件正文怎么写?下面就由小编给大家...
个人简历中技能特长怎么写 个人简历中技能特长怎么写  技能特长属于具体性描述,它需要全面、详细、有重点地将自身的技能、特长等核...
应届毕业生简历模板word格... 每一届大四学生都必须经历实习之旅才能正式毕业,只是,即将踏入社会的大四学生总纠结于实习简历表格要怎么...
面试特长爱好怎么写 很多简历模板中,都会要求求职者填写“爱好与特长”,其实用人单位会通过这些信息来判断求职者的个性。“爱...
个人简历中的自我评价范文精华...   简历中总是会有一份自我评价,这份自我评价怎么写呢?CN人才网小编整理20则范文。  自我评价一 ...
测试经理简历 测试经理简历模板  招聘者在对个人简历的审核上就是通过个人简历中你所体现出来的技能,让他们看到你的能...
应聘简历自我介绍 应聘简历自我介绍(精选10篇)  当来到一个陌生的地方时,我们不得不需要向他人介绍自己,自我介绍可以...
杜玉堂的简历 -管理资料 个人概况姓名:杜玉堂 性别:男 籍贯:山东曹县政治面貌:党员 学历:硕士 专业:细胞生物学 毕业院校...
数学教师个人简历(履历表)模... 个人基本资料姓  名出生日期1977-11-07性  别男婚姻状况未婚身  高170厘米体  重68...
简历特长爱好怎么写 简历特长爱好怎么写  简历特长爱好怎么写,往往的情况下面,我们会把简历中的特长和爱好写在同一个板块中...