1.1 线性回归
a. 为追求更快的速度应该使用矢量计算来提高运算速率;
b.
`labels += torch.tensor(np.random.normal(0,0.01,size = lables.size()), dtype = torch.float32)`
#加上偏差的原因:计算所得的label值无法与真实数据完全相等
c.random.shuffle
对数据集进行打乱(想到了shuffleNet)
d. 全连接层
按照正常的放射变换就可以
a1=X1W11+X2W12+X3*W13+b1
由于加法的广播机制,偏置参数为1x1也可以进行运算
参数的形状与批量大小无关,也正因为如此,对同一个模型可以选择不同的批量大小
1.2 SoftMax
Fashion-MNIST 分类常用数据集
- 预测种类(相比于线性这个是离散的)
- 与线性回归一样是线性叠加(放射变换)但是输出个数 = label的类别数(为所属类别的概率)
- 由于概率数值不确定所以使用SoftMax化作非负且和为1的
基于Pytorch的简洁实现
torchvision.datasets #一些加载数据的函数以及常用接口
torchvision.models #一些常用的模型例如ResNet,AlexNet
torchvision.transforms #图片变换,剪裁,旋转
torchvision.utils #其他函数以及方法
但是SoftMax函数还需要后续更新多一些! tag
1.3 多层感知机(MLP)
multilayers perceptron
- ReLU(rectified linear unit)**(只应用于隐藏层)**层数多应用这个会快一些因为计算量少 (非负)
- sigmoid(x) = 1 /(1 + exp(-2x))(分类器)[0,1]
- tanh(x) = (1 - exp(-2x))/(1 + exp(-2x)) [-1,1]
简单一层:H = relu(XW1 + b1);O = HW2 + b2
2.1 文本预处理
lines = [re.sub('['a-z]+' , ' ',line.strip().lower()) for line in f]
#将文件f中所有文本去空格,变小写,并用空格替代所有非字符
上述分类会剔除类似标点以及n’t之类的用法,专门分词的:
- spaCy
import spacy
nlp = spacy.load('en')
doc = nlp(text)
- NLTK
from nltk.tokenize import word_tokenize
字典(dictionary):是无序的数据集合;是一系列键-值对
列表(list):有序的数据集合
典型应用:
- 直接调用,索引
dictionary = ['id'] = '05'
添加dictionary = ('id') = '05'
删除a.update(b)
合并两个字典for key, value in sorted(dictionary.items())
遍历有顺序(sorted)的字典内容for key, value in set(dictionary.values())
遍历去重(set)之后的所有’值’
2.2 语言模型
目标:评估该序列是否合理,即计算该序列的概率。概率越大越合理
- 齐夫定律:单词词频与词频的排名成反比
- 马尔科夫性要看清楚是几!阶!的!
- 若序列程度为 T,时间步数为 n,那么共有 T - n 个合法的样本
随机采样:len-1 后以时间步为步长进行分组,舍弃不足时间步个的样本,之后随机取batch_size个组,shuffle后是无序的
相邻采样:len-1 后 // batch_size * batch_size 取出来连续的样本即可
2.3 循环神经网络基础(RNN)
- Ht 记录了截止到 t 的所有历史信息
- one-hot向量:长度 = 字典大小(索引所在为1,其余为0)
result.scatter_(1, x.long().view(-1, 1), 1)
# result[i, x[i, 0]] = 1
- RNN的输入&输出皆为num_steps个形状为(batch_size, vocab_size)的矩阵
- 返回的 H 状态是以元组的形式
- 困惑度(perplexity):通常用于描述语言模型的好坏**(是为标签类别概率的倒数)**
关系是一张表,表中的每行就是一个元组,每列是一个属性
2.4 循环神经网络进阶(RNN)
GRU
- 重置门有助于捕捉时间序列里短期的依赖关系;
- 更新门有助于捕捉时间序列里长期的依赖关系。
LSTM
- 遗忘门:控制上一时间步的记忆细胞
- 输入门:控制当前时间步的输入
- 输出门:控制从记忆细胞到隐藏状态
- 记忆细胞:⼀种特殊的隐藏状态的信息的流动
深度循环神经网络(RNN)
补充参数 layers = n,即可构建深度神经网络
双向循环神经网络
补充参数 bidirectional = True 即可实现双向(默认是False)
连接方式:前向的 Ht 和后向的 Ht 使用 concat 进行连接
好处:双向神经网络可以考虑到语言结构的前后的语序等结构