学习笔记 Day54(梯度,激活函数)

目录

1,梯度:

 2,激活函数

1,sigmoid

 1,torch.sigmoid

2, tanh

1,torch.tanh

 3,Relu 

3,loss的梯度

1,均方误差,mse

 2,softmax

4,感知机

1,单层感知机

2,多层感知机

5,链式法则

 6,神经网络反向传播算法

7,cross_entropy

8,全连接层 

9,激活函数与GPU加速


1,梯度:

学习笔记 Day54(梯度,激活函数)_第1张图片

 2,激活函数

1,sigmoid

学习笔记 Day54(梯度,激活函数)_第2张图片

 1,torch.sigmoid

import torch

a = torch.linspace(-100,100,10)

print(a)

print(torch.sigmoid(a))

学习笔记 Day54(梯度,激活函数)_第3张图片

2, tanh

学习笔记 Day54(梯度,激活函数)_第4张图片

1,torch.tanh

b = torch.linspace(-1,1,10)

print(b)

print(torch.tanh(b))

学习笔记 Day54(梯度,激活函数)_第5张图片

 3,Relu 

学习笔记 Day54(梯度,激活函数)_第6张图片

 学习笔记 Day54(梯度,激活函数)_第7张图片

3,loss的梯度

1,均方误差,mse

用pytorch求导:

import torch
from torch.nn import functional as F

x = torch.ones(1)

print(x)
w = torch.full([1],2.0)
print(w)

mse = F.mse_loss(torch.ones(1),w*x)
print(mse)

w.requires_grad_() # 对w进行更新,让它拥有求导信息

mse = F.mse_loss(torch.ones(1),w*x)

print(torch.autograd.grad(mse, [w]))

 学习笔记 Day54(梯度,激活函数)_第8张图片

 2,softmax

学习笔记 Day54(梯度,激活函数)_第9张图片

4,感知机

1,单层感知机

学习笔记 Day54(梯度,激活函数)_第10张图片

学习笔记 Day54(梯度,激活函数)_第11张图片

 x中,上面的0表示是在第一层,下面的数字表示该层节点的编号,w中,上面的1表示层数,下面上一层的节点数,后面的表示该层层数

导数推导过程:

学习笔记 Day54(梯度,激活函数)_第12张图片

2,多层感知机

 学习笔记 Day54(梯度,激活函数)_第13张图片

 导数推导

学习笔记 Day54(梯度,激活函数)_第14张图片

这里去掉求和是因为wjk只会影响到ok和tk而其它项不影响,所以求和符号可以去掉

5,链式法则

学习笔记 Day54(梯度,激活函数)_第15张图片

 6,神经网络反向传播算法

学习笔记 Day54(梯度,激活函数)_第16张图片

推导Wij:

7,cross_entropy

学习笔记 Day54(梯度,激活函数)_第17张图片

流程

学习笔记 Day54(梯度,激活函数)_第18张图片

代码实现

import  torch
from torch.nn import functional as F

x = torch.randn(1,784)
w = torch.randn(10,784)

# 建立公式

logits = [email protected]()
print(logits)

pre = F.softmax(logits,dim=1)
print(pre)

print(F.cross_entropy(logits,torch.tensor([2])))

 pre那两句可以不写

学习笔记 Day54(梯度,激活函数)_第19张图片

8,全连接层 

nn.Linear

class MLP(nn.Module):
    def __init__(self):
        super(MLP,self).__init__()

        self.model = nn.Sequential(  # nn.Sequential 一个容器,可以添加任何继承自nn.Module里面的类
            nn.Linear(784,200),
            nn.ReLU(inplace=True),
            nn.Linear(200,200),
            nn.ReLU(inplace=True),
            nn.Linear(200,10),
            nn.ReLU(inplace=True)

        )
    def forwaard(self,x):
        x  = self.model(x)
        return x
net = MLP()
optimizer = optim.SGD(net.parameters(),lr=0.01) # net.parameters() 装所有的参数(w,b) ,定义优化器
criteon = nn.CrossEntropyLoss() # 定义交叉熵

后续可用于训练

9,激活函数与GPU加速

学习笔记 Day54(梯度,激活函数)_第20张图片

tanh是sigmoid函数经过缩放得到 (rnn)

relu

学习笔记 Day54(梯度,激活函数)_第21张图片

 能解决梯度离散的现象

Leaky  ReLU 

学习笔记 Day54(梯度,激活函数)_第22张图片

seLU

学习笔记 Day54(梯度,激活函数)_第23张图片

 

学习笔记 Day54(梯度,激活函数)_第24张图片 

GPU加速

学习笔记 Day54(梯度,激活函数)_第25张图片 

 

你可能感兴趣的:(机器学习,学习,python,pytorch,深度学习)