定义模型 简单起见,考虑一个无偏差项的循环神经网络,且激活函数为恒等映射($\phi(x)=x$)。设时间步 $t$ 的输入为单样本 $\boldsymbol{x}_t \in \mathbb{R}^d$,标签为 $y_t$,那么隐藏状态 $\boldsymbol{h}_t \in \mathbb{R}^h$的计算表达式为 $$\boldsymbol{h}_t = \boldsymbol{W}_{…
导入库并加载数据集 import time import math import numpy as np import torch from torch import nn, optim import torch.nn.functional as F import zipfile device = torch.device('cuda' if torch.cuda.is_available() e…
读取周杰伦专辑歌词数据集: import time import math import numpy as np import torch from torch import nn, optim import torch.nn.functional as F import zipfile import random # import d2lzh_pytorch as d2l device = to…
读取数据集 首先读取这个数据集 import torch import random import zipfile with zipfile.ZipFile('/data/jaychou_lyrics.txt.zip') as zin: with zin.open('jaychou_lyrics.txt') as f: corpus_chars = f.read().decode('utf-8')…
不含隐藏状态的神经网络 考虑一个含单隐藏层的多层感知机。给定样本数为$n$、输入个数(特征数或特征向量维度)为$d$的小批量数据样本$\boldsymbol{X} \in \mathbb{R}^{n \times d}$。设隐藏层的激活函数为$\phi$,那么隐藏层的输出$\boldsymbol{H} \in \mathbb{R}^{n \times h}$计算为 $$\boldsymbol{H}…
把一段自然语言文本看作一段离散的时间序列。假设一段长度为$T$的文本中的词依次为$w_1, w_2, \ldots, w_T$,那么在离散的时间序列中,$w_t$($1 \leq t \leq T$)可看作在时间步(time step)$t$的输出或标签。给定一个长度为$T$的词的序列$w_1, w_2, \ldots, w_T$,语言模型将计算该序列的概率: $$P(w_1, w_2, \ldo…
假设输入形状是$n_h\times n_w$,卷积核窗口形状是$k_h\times k_w$,那么输出形状将会是 $$(n_h-k_h+1) \times (n_w-k_w+1).$$ 所以卷积层的输出形状由输入形状和卷积核窗口形状决定。卷积层有两个超参数,即填充和步幅。它们可以对给定形状的输入和卷积核改变输出形状。 填充 填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。下图…
卷积神经网络(convolutional neural network)是含有卷积层(convolutional layer)的神经网络,最常见的为二维卷积层。它有高和宽两个空间维度,常用来处理图像数据。 二维互相关运算 虽然卷积层得名于卷积(convolution)运算,但通常在卷积层中使用更加直观的互相关(cross-correlation)运算。在二维卷积层中,一个二维输入数组和一个二维核(…
计算设备 PyTorch可以指定用来存储和计算的设备,如使用内存的CPU或者使用显存的GPU。默认情况下,PyTorch会将数据创建在内存,然后利用CPU来计算。 用torch.cuda.is_available()查看GPU是否可用: import torch from torch import nn torch.cuda.is_available() # 输出 True 查看GPU数量: to…
读写Tensor 可以直接使用save函数和load函数分别存储和读取Tensor。save使用Python的pickle实用程序将对象进行序列化,然后将序列化的对象保存到disk,使用save可以保存各种对象,包括模型、张量和字典等。而load使用pickle unpickle工具将pickle的对象文件反序列化为内存。 下面的例子创建了Tensor变量x,并将其存在文件名同为x.pt的文件里。…