定义模型

简单起见,考虑一个无偏差项的循环神经网络,且激活函数为恒等映射(\(\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}_{hx} \boldsymbol{x}_t + \boldsymbol{W}_{hh} \boldsymbol{h}_{t-1}, \]

阅读全文 »

导入库并加载数据集

1
2
3
4
5
6
7
8
9
10
11
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() else 'cpu')

(corpus_indices, char_to_idx, idx_to_char, vocab_size) = load_data_jay_lyrics()
阅读全文 »

读取数据集

首先读取这个数据集

1
2
3
4
5
6
7
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}\)计算为

阅读全文 »

把一段自然语言文本看作一段离散的时间序列。假设一段长度为\(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, \ldots, w_T). \]

阅读全文 »

假设输入形状是\(n_h\times n_w\),卷积核窗口形状是\(k_h\times k_w\),那么输出形状将会是

\[ (n_h-k_h+1) \times (n_w-k_w+1). \]

所以卷积层的输出形状由输入形状和卷积核窗口形状决定。卷积层有两个超参数,即填充和步幅。它们可以对给定形状的输入和卷积核改变输出形状。

阅读全文 »

卷积神经网络(convolutional neural network)是含有卷积层(convolutional layer)的神经网络,最常见的为二维卷积层。它有高和宽两个空间维度,常用来处理图像数据。

阅读全文 »

计算设备

PyTorch可以指定用来存储和计算的设备,如使用内存的CPU或者使用显存的GPU。默认情况下,PyTorch会将数据创建在内存,然后利用CPU来计算。

torch.cuda.is_available()查看GPU是否可用:

阅读全文 »
0%