02- pytorch 实现 RNN
一 导包
import torch
from torch import nn
from torch.nn import functional as F
import dltools
1.1 导入训练数据
batch_size, num_steps = 32, 35
# 更改了默认的文件下载方式,需要将 article 文件放入该文件夹
train_iter, vocab = dltools.load_data_time_machine(batch_size, num_steps)
1.2 构造神经网络
num_hiddens = 256
# 构造了一个具有256个隐藏神经单元的单隐藏层的循环神经网络
rnn_layer = nn.RNN(len(vocab), num_hiddens)
构造了一个 循环神经网络 (RNN) 层,该 RNN 层具有以下特性:
-
num_hiddens = 256
: 这行代码定义了 RNN 层中的隐藏单元数量,即 RNN 层内部神经元的数量。在这个例子中,设置为 256,意味着 RNN 层将有 256 个隐藏神经单元。 -
nn.RNN(len(vocab), num_hiddens)
: 这行代码 创建了一个 RNN 层 的实例。它的参数如下:-
len(vocab)
: 这是 输入数据的特征维度。在循环神经网络中,输入数据通常是一个序列,每个时间步的输入是一个向量。len(vocab)
表示词汇表的大小,它代表了序列中的每个时间步可能的输入的数量。在自然语言处理任务中,词汇表的大小通常对应于词汇表中不同词汇的数量。 -
num_hiddens
: 这是 RNN 层内部的 隐藏单元数量,根据之前定义的值为 256。
-
综上所述,这段代码创建了一个 具有 256 个隐藏神经单元的单隐藏层的循环神经网络层。这个 RNN 层可以用来处理序列数据,例如文本数据,在文本数据中,每个时间步可以对应一个词汇表中的一个词或一个词的嵌入表示。
1.3 初始化隐藏状态
# 初始化隐藏状态
state = torch.zeros((1, batch_size, num_hiddens))
创建了一个 全零的张量作为隐藏状态。张量的形状是 (1, batch_size, num_hiddens)
,其中:
1
表示时间步的数量,这里初始化的是一个初始时间步的隐藏状态。batch_size
表示批量大小,即一次处理的样本数量。num_hiddens
表示每个时间步的隐藏单元数量,即隐藏状态的维度。
二 构建一个完整的循环神经网络
# 构建一个完整的循环神经网络
class RNNModel(nn.Module):def __init__(self, rnn_layer, vocab_size, **kwargs):super().__init__(**kwargs)self.rnn = rnn_layerself.vocab_size = vocab_sizeself.num_hiddens = self.rnn.hidden_sizeif not self.rnn.bidirectional:self.num_directions = 1self.linear = nn.Linear(self.num_hiddens, self.vocab_size)else:self.num_directions = 2self.linear = nn.Linear(self.num_hiddens * 2, self.vocab_size)# 前向传播def forward(self, inputs, state):X = F.one_hot(inputs.T.long(), self.vocab_size)X = X.to(torch.float32)Y, state = self.rnn(X, state)output = self.linear(Y.reshape(-1, Y.shape[-1]))return output, state# 初始化隐藏状态def begin_state(self, device, batch_size=1):return torch.zeros((self.num_directions * self.rnn.num_layers, batch_size, self.num_hiddens), device=device)
该部分定义了一个名为 RNNModel
的 PyTorch 模型类,该模型是一个循环神经网络 (RNN) 模型,用于处理序列数据。
-
__init__
方法:这是类的构造函数,用于初始化模型的各个组件。在这里,做了以下工作:super().__init__(**kwargs)
调用了父类的构造函数,确保正确初始化模型。self.rnn = rnn_layer
存储了 传入的 RNN 层。self.vocab_size = vocab_size
存储了 词汇表的大小。self.num_hiddens = self.rnn.hidden_size
获取了 RNN 层的隐藏状态大小。- 根据 RNN 是否是双向的,选择性地创建一个线性层,用于将 RNN 输出映射到词汇表大小的空间。如果是双向 RNN,则输入的维度是隐藏状态大小的两倍。
-
forward
方法:这个方法定义了 前向传播 过程。它接受输入inputs
和当前的隐藏状态state
。在前向传播中,它执行以下操作:- 使用
F.one_hot
将输入inputs
转化为 独热编码,以便与词汇表大小匹配。然后将其转换为浮点数张量。 - 将输入数据和隐藏状态传递给 RNN 层,以获得输出
Y
和新的 隐藏状态state
。 - 将 RNN 输出
Y
重塑成 二维张量,然后通过线性层self.linear
将其映射到词汇表大小的空间,并返回输出结果。
- 使用
-
begin_state
方法:这个方法用于 初始化隐藏状态,返回一个全零的张量,其形状取决于 RNN 的层数、方向数、隐藏单元数以及批量大小。
2.1 实例化模型
# 在训练前,跑下模型
device = dltools.try_gpu()
net = RNNModel(rnn_layer, vocab_size=len(vocab))
net = net.to(device)
创建了一个 RNNModel对象,该对象接受一个rnn_layer和一个词汇表大小作为参数。最后,它将模型移动到之前确定的设备上
三 执行训练
# 训练
num_epochs, lr = 200, 0.1
dltools.train_ch8(net, train_iter, vocab, lr, num_epochs, device)
3.1 执行预测
dltools.predict_ch8('time traveller', 10, net, vocab, device)
相关文章:
02- pytorch 实现 RNN
一 导包 import torch from torch import nn from torch.nn import functional as F import dltools 1.1 导入训练数据 batch_size, num_steps 32, 35 # 更改了默认的文件下载方式,需要将 article 文件放入该文件夹 train_iter, vocab dltools.load_data_time_…...
算法课作业1
https://vjudge.net/contest/581138 A - Humidex 模拟题 题目大意 给三个类型数字通过公式来回转化 思路 求e的对数有log函数,不懂为什么不会出精度错误,很迷,给的三个数字也没有顺序,需要多判断。 #include<cstdio>…...
linux文本处理 两行变一行
linux简单文本处理 [rootkvm ~]# cat test 1.1.1.1 test1 2.2.2.2 test2 3.3.3.3 test3 192.168.1.2 test4 10.23.9.19 test5 cat test | awk /^[0-9]/{T$1;next;}{print T,$1}1.1.1.1 test1 2.2.2.2 test2 3.3.3.3 test3 192.168.1.2 test4 10.23.9.19 test5 cat test | …...
第二次面试 9.15
首先就是自我介绍 项目拷打 总体介绍一下项目 谈一下对socket的理解 在数据接收阶段,如何实现一个异步的数据处理 谈一谈对qt信号槽的理解 有想过如何去编写一个信号槽吗 你是如何使用CMAKE编译文件的 C11特性了解些啥 shared_ptr 和 unique_ptr 的运用场景 …...
基于matlab实现的平面波展开法二维声子晶体能带计算程序
Matlab 平面波展开法计算二维声子晶体二维声子晶体带结构计算,材料是铅柱在橡胶基体中周期排列,格子为正方形。采用PWE方法计算 完整程序: %%%%%%%%%%%%%%%%%%%%%%%%% clear;clc;tic;epssys1.0e-6; %设定一个最小量,避免系统截断误差或除零错…...
Minio入门系列【2】纠删码
1 纠删码 Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据 1.1 什么叫纠删码 纠删码是一种用于重建丢失或损坏数据的数学算法。 纠删码(e…...
基于永磁同步发电机的风力发电系统研究(Simulink实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
5.后端·新建子模块与开发(自动模式)
文章目录 学习资料自动生成模式创建后端三层 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p11&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e 自动生成模式创建后端三层 首先,运行起来若依的前后端整个项目,…...
vue的data为什么要写成data(return{})这样而不是data:{}这样?
在Vue.js中,为什么要将data写成一个返回对象的函数data()而不是一个普通的对象data: {} 为什么? 因为Vue.js的组件实例是可复用的,而且它们可以在应用中多次实例化。通过将data定义为一个返回对象的函数,可以确保每个组件实例都…...
MySQL基础运维知识点大全
一. MySQL基本知识 1. 目录的功能 通用 Unix/Linux 二进制包的 MySQL 安装下目录的相关功能 目录目录目录binMySQLd服务器,客户端和实用程序docs信息格式的 MySQL 手册manUnix 手册页include包括(头)文件lib图书馆share用于数据库安装的错…...
javascript获取样式表的规则及读取与写入
CSSStyleSheet是继承了StyleSheet的接口属性,它是用于找当前文档中的<link rel“” href“”…>这样文件的,有以下属性:lenght,cssRules,title,href,type,deleteRule,insertRule等 CSSStyleRule是继承于CSSRule,它是用于找<link re…...
什么是promise?
是JavaScript中用于处理异步操作的一种机制。 异步操作,例如从服务器获取数据、读取文件、执行数据库查询等等。 经典使用:Axios 是一个基于Promise的HTTP客户端 Promise具有三个状态: Pending(待定):Pr…...
从零开始学习软件测试-第45天笔记
monkey事件 事件:对app进行的操作,比如触摸事件,滑动事件...动作:构成一个事件所需要的步骤。 调整事件的百分比 adb shell monkey -p 包名 -v -v --pct-xxx 百分比 次数>输出文件的路径 分析日志有没有报错 到日志中去找…...
visual studio常用快捷键
CtrlM、CtrlO 折叠到定义 CtrlM、CtrlM 折叠当前定义 CtrlM、CtrlA 折叠全部 CtrlK、CtrlD 自动编排代码格式 F12 转到定义 ShiftF12 查看所有定义 ctrl] 转到定义首部或尾部 ctrlX 未选中文本时,剪切/删除光标所在行。ctrlV 未选中文本时,粘贴到…...
数据变换:数据挖掘的准备工作之一
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…...
Go语言实践案例之简单字典
一、程序要实现效果: 在命令行调用程序的时候,可以在命令行的后面查询一个单词,然后会输出单词的音标和注释。 二、思路分析: 定义一个结构体 DictRequest,用于表示翻译请求的数据结构。其中包含了 TransType&#…...
笔试面试相关记录(3)
(1)String String和String.append()的底层实现 C中string append函数的使用与字符串拼接「建议收藏」-腾讯云开发者社区-腾讯云 (tencent.com) String String 在 第二个String中遇到\0就截止,append()的方法则是所有字符都会加在后面。 &…...
第6章_瑞萨MCU零基础入门系列教程之串行通信接口(SCI)
本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...
开源免费的流程图软件draw.io
2023年9月16日,周六上午 想买微软的visio,但发现不是很值得,因为我平时也不是经常需要画图。 所以我最后还是决定使用开源免费的draw.io来画图 draw.io网页版的网址: Flowchart Maker & Online Diagram Software draw.io的…...
Python绘图系统19:添加时间轴以实现动态绘图
文章目录 时间轴单帧跳转源代码 Python绘图系统: 📈从0开始的3D绘图系统📉一套3D坐标,多个函数📊散点图、极坐标和子图自定义控件:绘图风格📉风格控件📊定制绘图风格坐标设置进阶&a…...
深度解析shell脚本的命令的原理之rm
rm 是 Unix/Linux 系统中的一个基本命令,用于删除文件或目录。以下是对这个命令的深度分析: 基本操作:rm 命令删除一个或多个文件或目录。这是通过从文件系统中移除链接来完成的。在 Unix/Linux 中,文件是通过链接(可以…...
RPA机器人流程自动化专题培训大纲(供大家参考使用)
一、RPA机器人流程自动化概述 RPA的定义和发展历程RPA的应用场景和优势RPA与人工智能的关系 二、RPA机器人流程自动化基础知识 RPA的基本原理和技术架构RPA的常用技术和工具RPA的编程语言和开发环境 三、RPA机器人流程自动化实战应用 如何进行业务流程分析与优化如何利用R…...
Python用若干列的数据多条件筛选、去除Excel数据并批量绘制直方图
本文介绍基于Python,读取Excel数据,以一列数据的值为标准,对这一列数据处于指定范围的所有行,再用其他几列数据数值,加以筛选与剔除;同时,对筛选与剔除前、后的数据分别绘制若干直方图ÿ…...
驱动开发,IO多路复用实现过程,epoll方式
1.框架图 被称为当前时代最好用的io多路复用方式; 核心操作:一棵树(红黑树)、一张表(内核链表)以及三个接口; 思想:(fd代表文件描述符) epoll要把检测的事件…...
java在mysql中查询内容无法塞入实体类中,报错 all elements are null
目录 一、问题描述二、解决方案 一、问题描述 java项目中整体配置了mysql的驼峰式字段匹配规则。 mybatis.configuration.map-underscore-to-camel-casetrue由于项目需求,需要返回字段为file_id,file_url,并且放入实体类中,实体…...
Linux 挂载
挂载需要挂载源和挂载点 虚拟机本身就有的挂源 添加硬件 重启虚拟机 操作程序 sudo fdisk -l //以管理员权限查看电脑硬盘使用情况sudo mkfs.ext4 /dev/sdb //以管理员身份格式化硬盘sudo mkdir guazai //创建挂载文件夹 sudo mount /dev/sdb/guazai //将挂载源接上挂载点 s…...
[面试] 15道最典型的k8s面试题
文章目录 在 Kubernetes 中,有以下常见的资源对象:1.什么是 Kubernetes?它的主要特点是什么?2. Kubernetes 中的 Pod 是什么?它的作用是什么?3.Kubernetes 中的 Deployment 和 StatefulSet 有何区别&#x…...
lintcode 552 · 创建最大数 【算法 数组 贪心 hard】
题目 https://www.lintcode.com/problem/552/description 描述 给出两个长度分别是m和n的数组来表示两个大整数,数组的每个元素都是数字0-9。从这两个数组当中选出k个数字来创建一个最大数,其中k满足k < m n。选出来的数字在创建的最大数里面的位置…...
ModbusTCP服务端
1在Device下,添加设备net: 公交车。 2在net下添加 ModbusTCP...
Middleware ❀ Hadoop功能与使用详解(HDFS+YARN)
文章目录 1、服务概述1.1 HDFS1.1.1 架构解析1.1.1.1 Block 数据块1.1.1.2 NameNode 名称节点1.1.1.3 Secondary NameNode 第二名称节点1.1.1.4 DataNode 数据节点1.1.1.5 Block Caching 块缓存1.1.1.6 HDFS Federation 联邦1.1.1.7 Rack Awareness 机架感知 1.1.2 读写操作与可…...
Wordpress html5 动画/万能优化大师下载
今天要动态添加几条数据如果使用recyclerview就不划算和不够简洁。于是在网上看了addview的使用。 于是就开始来使用了,结果直接。。。。无法形式怎么回事,因为是在OkhttpUtils工具中使用的,以为是更新ui是要在线程中进行的。后面一想不对&a…...
华为官方网站专卖店/查网站
矩阵的Hadamard积与符号模式【摘要】:我们主要讨论了非负矩阵、M-阵的Hadamard积与Fan积问题,以及矩阵Hadamard积的一些范数不等式.同时也讨论了逆M-矩阵、零模式不变矩阵、符号模式矩阵、k-幂等阵和符号k-幂等阵等特殊矩阵的相关问题&#x…...
产品外观工业设计公司/小吴seo博客
读书笔记--第5篇--《公司绝不会告诉你的50大秘密》 0.法律解救不了您。 1.聪明过头并非明智之举。 2.年龄和性别歧视是活生生的现实。 3.公司并非畅所欲言的好地方。 4.如果你与老板作对,必然会被逐出公司大门。 5.与人力部门的闲谈,会使你面临失业的危险…...
wordpress是指什么系统/广告公司经营范围
数据库运行客户端发送的sql查询语句,并将最后的查询结果反馈给客户端。一、基本的查询语句SELECT <列名1>,<列名2>,... ... FROM <表名>; -- 字段顺序=列名顺序 -- *:代表所有列 --为列设定别名 as SELECT 姓名 AS s_name,…...
做百度移动端网站排名/教程seo推广排名网站
ubuntu 终端下配置无线网卡 2009-11-30 16:26:48| 分类: Ubuntu |举报 |字号 订阅 转贴:http://forum.ubuntu.org.cn/viewtopic.php?f116&t245226&start0注意:这个只是配置的教程&…...
商城网站建设计划书/全国免费发布广告信息平台
《.net, 哥已心灰意冷》,这位哥哥说了那么多,其实也没有能证明他所面对的问题是.net带来的。 其实,每一段时间都有人讨论这个问题,有些人是真的讨论了.net和java之类的技术上的差别,但是我发觉人们关心的并…...