神经网络简介(pytorch)
Posted 编程基础深度学习论文
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络简介(pytorch)相关的知识,希望对你有一定的参考价值。
pytorch手册笔记
https://github.com/zergtant/pytorch-handbook
有些引用了吴恩达视频中的板书和图片
神经网络的表示
我们有输入特征 、 、 ,它们被竖直地堆叠起来,这叫做神经网络的输入层。它包含了神经网络的输入;然后中间一层我们称之为隐藏层的四个结点。图中最后一层只由一个结点构成,而这个只有一个结点的层被称为输出层,它负责产生预测值。
激活函数
为什么激活函数都是非线性的
简单来说多层线性激活函数效果和一层一样
启动jupyter notebook
调包
import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
import numpy as np
sigmod 函数
输出为(0,1)常用作二分类
x= torch.linspace(-10,10,60)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
plt.ylim((0, 1))
sigmod=torch.sigmoid(x)
plt.plot(x.numpy(),sigmod.numpy())
tanh 函数
输出区间是在(-1,1)之间
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
plt.ylim((-1, 1))
tanh=torch.tanh(x)
plt.plot(x.numpy(),tanh.numpy())
ReLU 函数
Relu(Rectified Linear Units)修正线性单元
a = max(0,z)
也就是说:z>0时,梯度始终为1,从而提高神经网络基于梯度算法的运算速度。然而当 z<0时,梯度一直为0。ReLU函数只有线性关系(只需要判断输入是否大于0)不管是前向传播还是反向传播,都比sigmod和tanh要快很多
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
plt.ylim((-3, 10))
relu=F.relu(x)
plt.plot(x.numpy(),relu.numpy())
Leaky Relu 函数
为了解决relu函数z<0时的问题出现了 Leaky ReLU函数,该函数保证在z<0的时候,梯度仍然不为0。ReLU的前半段设为αz而非0,通常α=0.01
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
plt.ylim((-3, 10))
l_relu=F.leaky_relu(x,0.1) # 这里的0.1是为了方便展示,理论上应为0.01甚至更小的值
plt.plot(x.numpy(),l_relu.numpy())
以上是关于神经网络简介(pytorch)的主要内容,如果未能解决你的问题,请参考以下文章
搞定《动手学深度学习》-(李牧)PyTorch版本的所有内容
PyTorch从入门到精通100讲-Pytorch Geometric 从原理到实战应用案例(附代码)