机器学习:使用计算机实现算法,使得计算机能够学习数据、获得经验、并实现预测或得出结果的过程。
深度学习:以研究人工神经网络算法为核心的学科。
一、开始的准备与了解
python=3.7.9
cudatoolkit=11.3
pytorch==1.12.0
torchaudio==0.12.0
torchvision==0.13.0
pytorch库的基本架构
二、torch.nn.linear实现单层回归网络正向传播
三、二分类神经网络
sigmoid函数
Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。在深度学习中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的激活函数,将变量映射到[0,1]之间。
sigmoid函数的导数可以用其自身来表示:
函数特性与优缺点:
- Sigmoid函数的输出范围是0到1。由于输出值限定在0到1,因此它对每个神经元的输出进行了归一化。
- 用于将预测概率作为输出的模型。由于概率的取值范围是0到1,因此Sigmoid函数非常合适
- 梯度平滑,避免跳跃的输出值
- 函数是可微的。这意味着可以找到任意两个点的Sigmoid曲线的斜率
- 明确的预测,即非常接近1或0。
- 函数输出不是以0为中心的,这会降低权重更新的效率
- Sigmoid函数执行指数运算,计算机运行得较慢。
对数几率回归:取对数几率后得到的就是线性回归的
import torch
X = torch.tensor([[1,0,0],[1,1,0],[1,0,1],[1,1,1]],dtype = torch.float32)
andgate = torch.tensor([[0],[0],[0],[1]],dtype = torch.float32)
w = torch.tensor([-0.2,0.15,0.15],dtype = torch.float32)
def LogisticR(X,w):
zhat = torch.mv(X,w)
sigma = 1/(1+torch.exp(-zhat))
#sigma = torch.sigmoid(zhat)
andhat = torch.tensor([int(x) for x in sigma >= 0.5],dtype = torch.float32)
return sigma,andhat
sigma,andhat = LogisticR(X,w)
ReLU函数
ReLU(Rectified Linear Unit)
tanh
tanh (hyperbolic tangent)双曲正切函数
torch.nn.functional实现二分类网络正向传播
import torch
from torch.nn import functional as F
x = torch.tensor([[0,0],[1,0],[0,1],[1,1]],dtype=torch.float32)
torch.random.manual_seed(99)
dense = torch.nn.Linear(2,1)
zhat = dense(x)
sigma = F.sigmoid(zhat)
y = [int(x) for x in sigma >=0.5]
四、多分类神经网络softmax回归
如果是swim,run,bike3分类
z = torch.tensor([10,9,5],dtype=torch.float32)
torch.softmax(z,dim=0)#dim=0在最外层的维度进行计算
dim指定到哪一个维度,就会将这个维度上的数据作为类别(即概率和为1)