线性回归和 softmax 回归都是单层神经网络的实例,但我们通常遇到的问题并没有这么简单,本节将涉及多层神经网络的概念。参考吴恩达机器学习中关于神经网络的部分。 已经理解的内容不再赘述。
3.8.1 隐藏层
略。
3.8.2 激活函数
即使有了多层结构,数据在层与层之间不断进行传递,即所谓仿射变换(affine transformation),整个过程中只有线性变换。为了产生非线性的变化,我们需要引入激活函数(activation function)。概念已经在之前学过了,着重看一下几个常用的激活函数。
torch 中关于激活函数的部分都在torch.nn.functional模块中, 而Tensor类中可以同样的方法可以用。
先准备一下用于画图的部分。
# 画出激活函数def show_act_func(x, y, title):plt.plot(x.detach().numpy(), y.detach().numpy())plt.title(title)plt.xlabel("x")plt.ylabel("y")plt.show()# 数据范围x = torch.arange(-15.0, 15.0, 0.05, requires_grad=True)
- ReLu(rectified linear unit)函数
Relu 函数提供了一种非常简单的非线性变换, 将负数变为0,正数不变。
# reluy = x.relu()show_act_func(x, y, "relu(x)")y = y.sum().backward()show_act_func(x, x.grad, "grad of relu(x)")


- sigmoid 函数
sigmoid 函数可以将数值变换到(0,1)范围内。
# sigmoidy =x.sigmoid()show_act_func(x, y, "sigmoid(x)")x.grad.zero_()y = y.sum().backward()show_act_func(x, x.grad, "grad of sigmoid(x)")


- tanh 函数
tanh 函数用于将数值变换到 (-1,1) 范围内。
# tanhy =x.tanh()show_act_func(x, y, "tanh(x)")x.grad.zero_()y = y.sum().backward()show_act_func(x, x.grad, "grad of tanh(x)")
3.8.2 激活函数.py
3.8.3 多层感知机
多层感知机:含有 至少一个隐藏层 的由 全连接层 组成的 神经网络 ,且每个隐藏层的输出通过激活函数进行变换。
多层感知机的层数和各隐藏层中隐藏单元个数都是 超参数 。
其他略,吴恩达机器学习笔记中都讲过了。

