8.bidirectional_recurrent_neural_network

2023-11-08

import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')
sequence_length=28
input_size=28
hidden_size=128
num_layers=2
num_classes=10
batch_size=100
num_epochs=1
learning_rate=0.001
train_dataset=torchvision.datasets.MNIST(root='../../data/',train=True,transform=transforms.ToTensor(),download=True)
test_dataset=torchvision.datasets.MNIST('../../data/',train=False,transform=transforms.ToTensor())
train_loader=torch.utils.data.DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True)
test_loader=torch.utils.data.DataLoader(dataset=test_dataset,batch_size=batch_size,shuffle=False)
class BiRNN(nn.Module):
    def __init__(self,input_size,hidden_size,num_layers,num_classes):
        super(BiRNN,self).__init__()
        self.hidden_size=hidden_size
        self.num_layers=num_layers
        self.lstm=nn.LSTM(input_size,hidden_size,num_layers,batch_first=True,bidirectional=True)
        self.fc=nn.Linear(hidden_size*2,num_classes)
    def forward(self,x):
        h0=torch.zeros(self.num_layers*2,x.size(0),self.hidden_size).to(device)
        c0=torch.zeros(self.num_layers*2,x.size(0),self.hidden_size).to(device)
        out,_=self.lstm(x,(h0,c0))
        out=self.fc(out[:,-1,:])
        return out
model=BiRNN(input_size,hidden_size,num_layers,num_classes).to(device)
criterion=nn.CrossEntropyLoss()
optimizer=torch.optim.Adam(model.parameters(),lr=learning_rate)
total_step=len(train_loader)
for epoch in range(num_epochs):
    for i,(images,lables) in enumerate(train_loader):
        images=images.reshape(-1,sequence_length,input_size).to(device)
        labels=lables.to(device)
        outputs=model(images)
        loss=criterion(outputs,lables)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        if (i+1)%100==0:
            print('epoch[{}/{}],step[{}/{}].loss:{:.4f}'.format(epoch+1,num_epochs,i+1,total_step,loss.item()))

with torch.no_grad():
    correct=0
    total=0
    for images,labels in test_loader:
        images=images.reshape(-1,sequence_length,input_size).to(device)
        labels=labels.to(device)
        outputs=model(images)
        _,predicted=torch.max(outputs.data,1)
        total+=labels.size(0)
        correct+=(predicted==lables).sum().item()
    print('test accuracy of the model on the 10000 test images:{}%'.format(100*correct/total))
torch.save(model.state_dict(),'model.ckpt')

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

8.bidirectional_recurrent_neural_network 的相关文章

随机推荐

  • 词法分析器简介

    词法分析器简介 引言 编译器的工作的开始 就是读入源码 预编译先不考虑 然后 去除一些空字符 然后经过词素匹配 并和其属性 可选 组成一个的词法单元 多个词法单元 连接成词法单元序列 自此 此法分析器的工作就算完成了 呵呵 就这么简单 可见
  • sourcetree创建分支与分支合并

    一 Sourcetree简单介绍 通过Git可以进行对项目的版本管理 但是如果直接使用Git的软件会比较麻烦 因为是通过一条一条命令进行操作的 Sourcetree则可以与Git结合 提供图形界面 使用会方便很多 Git和Sourcetre
  • Flowable BPMN 用户手册 (v 6.3.0)

    小编本来想学习 activity但是被同事强烈推荐学习Flowable 百度了一下发现Flowable是activity的一个升级 第一步找学习资料 找到一个分享给大家 https tkjohn github io flowable use
  • linux的核心安装下的命令行,linux lilo命令安装核心载入,开机管理程序

    lilo linux loader 安装核心载入 开机管理程序 语 法 lilo clqtV b C d D f i I m P r R s S uU v 补充说明 lilo 是个 Linux 系统核心载入程序 同时具备管理开机的功能 单独
  • 合理使用 inline来优化程序 尽可能减少临时对象 尽可能使用初始化列表

    1 合理使用inline 调用 函数实际上将程序执行顺序转移到函数所存放在内存中某个地址 将函数的程序 内容执行完后 再返回到转去执行该函数前的地方 这种转移操作要求在转去前 要保护现场并记忆执行的地址 转回后先要恢复现场 并按原来保存地址
  • Would you like Visual Studio Code to periodically run “git fetch“?是什么意思?

    这句话的意思是 你是否想让Visual Studio Code定期运行 git fetch 命令 git fetch 是 Git 命令之一 用于从远程代码仓库获取最新的代码变动 但不会自动将这些变动合并到你当前所在的分支 该命令通常用于更新
  • Python os.path模块的使用

    Python os path模块的使用 Python的os模块是一个对接操作系统的模块 当我们需要对路径进行操作时 可以使用os path os path模块实现了很多处理长文件名 长路径名的函数 可以用来对路径切分 拼接 转换等 先导入o
  • Seata分布式事务失效踩坑记录

    在学习Seata过程中 偶然发现了一个坑 这里做个记录 环境说明 先说下我的环境 我是搭建了一个SpringCloud微服务 然后A服务调用B服务 然后在这两个服务都集成了Seata 集成过程是没有问题的 业务场景是注册场景 A服务中需要操
  • 01-java学习笔记【接口与抽象类】

    这些是我自己的理解加上网上优秀的分享总结出来的 抽象类是用来捕捉子类的通用特性的 它不能被实例化 只能被用作子类的超类 抽象类是被用来创建继承层级里子类的模板 接口是抽象方法的集合 如果一个类实现了某个接口 那么它就继承了这个接口的抽象方法
  • papers with code介绍(人工智能方向研究生的必备网站)

    paperswithcode介绍 人工智能方向的必备网站 本文将从两个部分介绍 一 正文 二 导航 A browse State of the Art B Datasets C Method D More 网站首页 一 正文 2 最上面是四
  • Python中RSA加密

    文章目录 RSA加密 一 概述 1 简介 2 签名 3 环境配置 二 算法实现 1 公钥和私钥 2 加密和解密 3 签名和解签 RSA加密 一 概述 1 简介 RSA是非对称的 也就是用来加密的密钥和用来解密的密钥不是同一个 和DES一样的
  • LCD背光控制芯片

    PWM信号可通过调整占空比来调节输出电压 可以使用PWM来控制LCD的背光 但CPU的pwm引脚驱动能力太弱 常外接一个背光芯片 rt9293就是这样的一个恒流升压转换器 Iled Vref Rset Vfb Duty 300mV Duty
  • 论文阅读_大语言模型_Llama2

    英文名称 Llama 2 Open Foundation and Fine Tuned Chat Models 中文名称 Llama 2 开源的基础模型和微调的聊天模型 文章 http arxiv org abs 2307 09288 代码
  • js怎样判断引用类型和值类型?

    1 typeof 输出的类型 console log typeof y undefined console log typeof 101 number console log typeof hello string console log
  • 如何使用logging生成日志

    GiantPandaCV导语 日志对程序执行情况的排查非常重要 通过日志文件 可以快速定位出现的问题 本文将简单介绍使用logging生成日志的方法 logging模块介绍 logging是python自带的包 一共有五个level deb
  • https 访问 iframe 的http

    最近做的项目要求https 嵌入http的项目 浏览器老是提示https不能访问http 为了满足需求 在本地项目中添加了nginx转发服务 将项目中的iframe 转发为https 再又nginx将https转发至http 满足需求了 n
  • 1. 经验累积分布函数

    为了说明经验累积分布函数 我们这里使用一个学生成绩的数据集 假设班有50名学生 这些学生刚刚进行了一个测试 这个测试的结果是以0 100的分数来体现的 我们要如何更好的可视化结果呢 例如确定成绩的最大值和最小值 对于这个数据的可视化 我们可
  • jar包修改并重新打包,jar包反编译使用工具以及修改代码方法

    jar包修改并重新打包 jar包反编译使用工具以及修改代码方法 备忘 https blog csdn net tomcat zhu article details 79240011
  • unity中的reflectionProbe的使用

    下面说一下Reflection Probe 大家都知道 当使用标准着色器时 每一个材质都会具有一定程度的镜面反射 specularity 和金属反射 metalness 属性 在没有强大的硬件来处理即时光迹追踪反射的情况下 我们得仰赖预先计
  • 8.bidirectional_recurrent_neural_network

    import torch import torch nn as nn import torchvision import torchvision transforms as transforms device torch device cu