文章目录
- 第一课 线性回归
- 第二课 softmax与分类模型
- 第三课 多层感知机
- 第四课 文本预处理
- 第五课 语言模型
- 第六课 循环神经网络基础
- 第七课 循环神经网络进阶
- 第八课 过拟合和欠拟合及其解决方案
- 第九课 梯度消失、梯度爆炸
- 第十课 机器翻译及相关技术
- 第十一课 注意力机制和seq2seq模型
- 第十二课 Transformer
- 第十三课 卷积神经网络基础
- 第十四课 LeNet
- 第十五课 卷积神经网络进阶
- 第十六课 批量归一化和残差网络
- 第十七课 凸优化
- 第十八课 梯度下降
- 第十九课 优化算法进阶
- 第二十课 word2vec
- 第二十一课 词嵌入进阶
- 第二十二课 数据增强
- 第二十三课 模型微调(fine tuning)
- 第二十四课 文本分类
- 第二十五课 目标检测基础
- 第二十六课 GAN
- 第二十七课 DCGAN
- 第二十八课 图像风格迁移
- 第二十九课 图像分类1
- 第三十课 图像分类2
2020.2.11
第一课 线性回归
1.怎样去初始化一个多层的网络?(共有三种方法)
# method one
net = nn.Sequential(
nn.Linear(num_inputs, 1)
# other layers can be added here
)
# method two
net = nn.Sequential()
net.add_module('linear', nn.Linear(num_inputs, 1))
# net.add_module ......
# method three
from collections import OrderedDict
net = nn.Sequential(OrderedDict([
('linear', nn.Linear(num_inputs, 1))
# ......
]))
2.初始化模型参数的方法
# pytorch method
from torch.nn import init
init.normal_(net[0].weight, mean=0.0, std=0.01)
init.constant_(net[0].bias, val=0.0) # or you can use `net[0].bias.data.fill_(0)` to modify it directly
# manual method
w = torch.tensor(np.random.normal(0, 0.01, (num_inputs, 1)), dtype=torch.float32)
b = torch.zeros(1, dtype=torch.float32)
w.requires_grad_(requires_grad=True)
b.requires_grad_(requires_grad=True)
3.有哪些定义好的损失函数?
均方、交叉熵
4.怎么定义优化函数?
optimizer = optim.SGD(net.parameters(), lr=0.03)
5.优化函数是怎么工作的?
常用的一种小批量随机梯度下降方法,首先随机选取一个小批量数据,通过反向传播计算Loss梯度,以这个梯度与一个预设的正数的乘积作为参数调整量,迭代更新。
6.训练的代码块一般是什么结构?
epoch 循环完成所有数据的一次训练
batch 循环完成一个batch的训练
数据读入
网络输出结果
计算Loss
梯度清零
反向传播
参数更新
第二课 softmax与分类模型
1.softmax的形式是什么?它解决了哪两个问题?
e1/e1+e2+e3+…
解决了预测值与标签值的误差难度量、预测结果不直观这两个问题
2.输出,输入(样本,特征),参数,偏差,批量一般是怎么设置的?为什么要这么设置?
一般把一个批量作为一个tensor输入,batchsize表示这个批量包含的样本数,一张图片包含的特征即为长*宽个像素;
输出大小与网络的需求有关;
每层参数的大小与每层输出一致;
批量的设置主要是为了充分利用矢量计算的效率。
3.交叉熵的形式及优点(相对于平方损失)
(1/n)sum(log(预测类别正确的置信度[0-1]))
交叉熵相对于平方损失只关心正确预测结果
4.怎么获取数据iter,参数初始化,定义模型,定义损失函数
获取数据
batch_size = 256
num_workers = 4
train_iter = torch.utils.data.DataLoader(mnist_train, batch_size=batch_size, shuffle=True</