从零开始实现递归神经网络——【torch学习笔记】

引用翻译:《动手学深度学习》

从头开始实现一个语言模型。它是基于H.G.威尔斯的 "时间机器 "所训练的字符级递归神经网络。

import collections
class Vocab(object): def __init__(self, tokens, min_freq=0, use_special_tokens=False):# 根据频率和词进行排序counter = collections.Counter(tokens)token_freqs = sorted(counter.items(), key=lambda x: x[0])token_freqs.sort(key=lambda x: x[1], reverse=True)if use_special_tokens:# padding, 句首, 句尾, unknownself.pad, self.bos, self.eos, self.unk = (0, 1, 2, 3)tokens = ['<pad>', '<bos>', '<eos>', '<unk>']else:self.unk = 0tokens = ['<unk>']tokens += [token for token, freq in token_freqs if freq >= min_freq]self.idx_to_token = []self.token_to_idx = dict()# len(self.idx_to_token)刚开始为0,这里在逐渐扩大,从0到token的数量for token in tokens:self.idx_to_token.append(token)# 因为初始时前一步self.idx_to_token.append添加了元素,所以后续需要减去1,这样才能从0开始self.token_to_idx[token] = len(self.idx_to_token) - 1def __len__(self):return len(self.idx_to_token)def __getitem__(self, tokens):if not isinstance(tokens, (list, tuple)):return self.token_to_idx.get(tokens, self.unk)else:return [self.__getitem__(token) for token in tokens]def to_tokens(self, indices):if not isinstance(indices, (list, tuple)):return self.idx_to_token[indices]else:return [self.idx_to_token[index] for index in indices]def load_data_time_machine(num_examples=10000):"""加载数据集."""with open('../data/timemachine.txt') as f:raw_text = f.read()lines = raw_text.split('\n')text = ' '.join(' '.join(lines).lower().split())[:num_examples]vocab = Vocab(text)corpus_indices = [vocab[char] for char in text]return corpus_indices, vocab
import sys
sys.path.insert(0, '..')
import d2l
import math
import torch
import torch.nn.functional as F
import torch.nn as nn
import time
corpus_indices, vocab = load_data_time_machine()

数据概况如下:

print(corpus_indices[0:25])
print(vocab)
print(len(vocab))  # 有44个字符
[3, 10, 2, 1, 3, 5, 13, 2, 1, 13, 4, 14, 10, 5, 7, 2, 20, 1, 22, 16, 1, 10, 25, 1, 18]
<__main__.Vocab object at 0x7fb4f3443780>
44

一、独热编码

独热编码向量提供了一种简单的方法,将单词表达为向量,以便在深度网络中处理它们。

简而言之,我们将每个词映射到一个不同的单元向量:假设字典中不同的字符数量为

从零开始实现递归神经网络——【torch学习笔记】相关推荐

  1. 【图神经网络】图神经网络(GNN)学习笔记:GNN的通用框架

    图神经网络GNN学习笔记:GNN的通用框架 1. MPNN 2. NLNN 3. GN 参考资料 所谓通用框架,是对多种变体GNN网络结构的一般化总结,也是GNN编程的通用范式,这里介绍3类通用框架: ...

  2. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP

    原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron  python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...

  3. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR

    原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression  python源代码(GitHub下载 CSDN免费下载) ...

  4. 【图神经网络】图神经网络(GNN)学习笔记:基于GNN的图表示学习

    图神经网络GNN学习笔记:基于GNN的图表示学习 1. 图表示学习 2. 基于GNN的图表示学习 2.1 基于重构损失的GNN 2.2 基于对比损失的GNN 参考资料 本文主要就基于GNN的无监督图表 ...

  5. 【图神经网络】图神经网络(GNN)学习笔记:图分类

    图神经网络GNN学习笔记:图分类 1. 基于全局池化的图分类 2. 基于层次化池化的图分类 2.1 基于图坍缩的池化机制 1 图坍缩 2 DIFFPOOL 3. EigenPooling 2.2 基于 ...

  6. 【图神经网络】图神经网络(GNN)学习笔记:图的基础理论

    图神经网络GNN学习笔记:图的基础理论 1. 图的概述 2.图的基本类型 2.1 有向图和无向图 2.2 非加权图与加权图 2.3 连通图与非连通图 2.4 二部图 2.5 邻居和度 2.6 子图和路 ...

  7. 【图神经网络】图神经网络(GNN)学习笔记:GNN的应用简介

    @TOC GNN的应用简述 GNN的适用范围非常广泛: 显式关联结构的数据:药物分子.电路网络等 隐式关联结构的数据:图像.文本等 生物化学领域中:分子指纹识别.药物分子设计.疾病分类等 交通领域中: ...

  8. 3.0 神经网络 - PyTorch学习笔记

    神经网络 (NEURAL NETWORK) 神经网络可以通过 torch.nn 包来构建 上节课已经学习了 autograd ,nn 是在 autograd 的基础上定义和区分模型.一个 nn.Mod ...

  9. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-01-CNN基础知识点

    转载自:http://blog.csdn.net/niuwei22007/article/details/47399913 <CNN基础知识点>From:Convolutional Neu ...

最新文章

  1. 【iOS-cocos2d-X 游戏开发之十四】cocos2dx(c++)中访问object函数
  2. 源代码解读Cas实现单点登出(single sign out)功能实现原理--转
  3. ios退款 怎么定位到是哪个用户_关于ios企业签名必须知道的几点
  4. linux下oracle数据库升级,Oracle数据库在LinuxAS4升级
  5. mycncart操作使用教程 - 横幅广告
  6. 无法渲染窗口发黄_基础c4d教程:OC渲染器的立体光照
  7. pandas的自带数据集_用Python和Pandas进行数据清理:检测丢失值
  8. amf组网_【5G核心网】5G核心网SA组网方案及4G/5G互操作探讨
  9. paddlepaddle的使用
  10. python 01列表异或_python运算符及优先级顺序
  11. 逻辑回归(Logistic Regression)学习笔记
  12. 计算机中我的云文档在哪儿里,wps云文档可以删除吗在哪里删除
  13. 调试运行计算机程序的目的是,软件调试的目的是什么
  14. 【随笔】Java团长
  15. 陈强教授《机器学习及R应用》课程 第十五章作业
  16. 下载网络图片并上传微信公众平台素材库
  17. aligned_allocator
  18. 电路分析第二章 网孔电流法,节点电压法,叠加原理
  19. 小鼠试毒问题(二进制)
  20. 爱点击ICLK.US增持畅移,深度协同催生更多增长机会

热门文章

  1. Linux中设置计划任务
  2. ROS中的Movelt!
  3. 「数据分析」协同过滤算法
  4. 2021辐轮王土拨鼠第一品牌全球钛合金自行车销量排行榜前十名
  5. 【原创翻译】从Mambo到Joomla! 的迁移手册【Joomla 文档】
  6. NAND flash 相关知识
  7. 网瘾专家陶宏开:沉迷网游3年智商将下降10%
  8. JS的Array对象解析
  9. “独角兽”京东工业品,生于“豪门”,也要活在“豪门”影子里?
  10. 新传专业需要计算机二级吗,大学生有必要去考取计算机二级证书吗?