Diving Deep into Neural Networks
- 训练 DL 的步骤:建立数据集;建立网络模型;通过损失函数评价模型效果;通过优化函数优化模型权重参数。
Linear layer 也被称为全连接层(fully connected layer)。其实现的变换为:
Y = Wx + b
。实例化:myLayer = Linear(in_features=10,out_features=5,bias=True)
。multiple linear layer 没有意义。因为其功能完全可以通过单个 linear layer 实现。
常用的非线性层函数(激活函数)有: Sigmoid, Tanh, ReLU, Leaky ReLU。
- Sigmoid:
- Tanh:
- ReLU:
- 通过 nn.Module 构建 DL 模型。 nn.Module 包含两个函数:_init_ 和 _forward_。在 _init_ 里,进行设置 layers 的操作;在 _forward_ 里,进行前向传播的设置。激活函数可以设置在 _init_ 里,也可以设置在 _forward_ 里,一般而言,设置在后者更利于理解。示例如下:
class MyFirstNetwork(nn.Module):
def __init__(self,input_size,hidden_size,output_size):
super(MyFirstNetwork,self).__init__()
self.layer1 = nn.Linear(input_size,hidden_size)
self.layer2 = nn.Linear(hidden_size,output_size)
def __forward__(self,input):
out = self.layer1(input)
out = nn.ReLU(out)
out = self.layer2(out)
return out
- 针对不同的 ML 问题,需要不同结构的模型,尤其是最后一个 layer 极其重要。
问题 | 最后一层的函数选择 | 场景举例 |
---|---|---|
回归问题 regression problem | Linear layer | 预测价格 |
分类问题 binary classifying | Sigmoid function | 识别猫狗 |
多分类问题 multi-class classification | Softmax layer | 识别猫、狗、熊猫 |
- 损失函数
问题 | 常用的损失函数选择 | 场景举例 |
---|---|---|
回归问题 regression problem | mean square error (MSE) | 预测价格 |
分类问题 binary classifying | cross-entropy | 识别猫狗 |
多分类问题 multi-class classification | cross-entropy | 识别猫、狗、熊猫 |
- 常用的优化函数有:ADADELTA, Adagrad, Adam, SparseAdam, Adamax, ASGD, LBFGS, RMSProp, Rprop, SGD。每次训练都需要对优化函数进行梯度清零的操作,否则会有梯度累积。
for input, target in dataset:
optimizer.zero_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward() # 计算梯度
optimizer.step() # 优化参数
- 本节最后描述了通过 PyTorch 识别猫和狗的完整过程。(不感兴趣,略过。)