Pytorch学习笔记3

Pytorch学习笔记3

Pytorch学习笔记3_第1张图片
Pytorch学习笔记3_第2张图片
Pytorch学习笔记3_第3张图片
Pytorch学习笔记3_第4张图片
Pytorch学习笔记3_第5张图片
Pytorch学习笔记3_第6张图片
Pytorch学习笔记3_第7张图片
激活函数:
Pytorch学习笔记3_第8张图片
Sigmoid函数求导
theta‘=theta(1-theta)

Pytorch学习笔记3_第9张图片

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

Tanh激活函数:
Pytorch学习笔记3_第10张图片
ReLU激活函数:
Pytorch学习笔记3_第11张图片
Pytorch学习笔记3_第12张图片

LOSS函数:

Pytorch学习笔记3_第13张图片
Pytorch学习笔记3_第14张图片
pytorch自动求导:
torch.autograd.grad(mse,[w])
Pytorch学习笔记3_第15张图片

backward函数求导

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

Gradient API

Pytorch学习笔记3_第16张图片

Softmax

Pytorch学习笔记3_第17张图片
Pytorch学习笔记3_第18张图片
Pytorch学习笔记3_第19张图片
Pytorch学习笔记3_第20张图片

F.softmax

a=torch.rand(3)
a.requires_grad_()
p=F.softmax(a,dim=0)
p.backward()
p=F.softmax(a,dim=0)

Pytorch学习笔记3_第21张图片

感知机的梯度推导

在这里插入图片描述
导数推导:
Pytorch学习笔记3_第22张图片
Pytorch学习笔记3_第23张图片
Pytorch学习笔记3_第24张图片

多输出感知机

Pytorch学习笔记3_第25张图片
Pytorch学习笔记3_第26张图片
链式法则:
Pytorch学习笔记3_第27张图片
Pytorch学习笔记3_第28张图片
Pytorch学习笔记3_第29张图片
Pytorch学习笔记3_第30张图片
Pytorch学习笔记3_第31张图片
Pytorch学习笔记3_第32张图片
首先计算输出层,再计算倒数第二层,一直迭代,最后得到全部的梯度
Pytorch学习笔记3_第33张图片

2D函数优化实例

Pytorch学习笔记3_第34张图片
x=np.arrange(-6,6,0.1)
np.meshgrid(x,y)
将两张map拼在一起,包含x,y的坐标

Pytorch学习笔记3_第35张图片

Logistic regression

Linear:y=xw+b
for probablility output:
Pytorch学习笔记3_第36张图片
为什么不能直接最大化准确率?

Pytorch学习笔记3_第37张图片
Pytorch学习笔记3_第38张图片
Softmax可以满足概率和为1,并且能使大概率的更大。

crossentrophy loss

Pytorch学习笔记3_第39张图片
结论:最小化交叉熵相当于最小化散度(两个分布的区别程度)

Binary classification

Pytorch学习笔记3_第40张图片
Pytorch学习笔记3_第41张图片
为什么不用MSE?

  1. sigmoid+MSE可能产生梯度消失
  2. 收敛更慢
  3. 有些领域可以使用(meta-learning)

Pytorch学习笔记3_第42张图片
Pytorch学习笔记3_第43张图片
Pytorch学习笔记3_第44张图片
Pytorch学习笔记3_第45张图片
一定要加入初始化操作

全连接层

Pytorch学习笔记3_第46张图片
Pytorch学习笔记3_第47张图片
Pytorch学习笔记3_第48张图片
self.model=nn.Sequential(
nn.Linear(784,200),
nn.ReLu(inplace=True),
nn.Linear(200,200),…

def forward(self,x)
x=self.model(x)
return x

API区分

Pytorch学习笔记3_第49张图片
nn.Linear,nn.Relu是类风格,需要先实例化
layer=nn.Relu()
x=layer(x)
为方便,可以使用x=F.relu(x,inplace=True)直接输出经过relu的x结果。

Pytorch学习笔记3_第50张图片

激活函数

ReLU避免了梯度爆炸与消失的情况,计算更加简单

Leaky ReLU
Pytorch学习笔记3_第51张图片
Pytorch学习笔记3_第52张图片

SELU:
Pytorch学习笔记3_第53张图片
Pytorch学习笔记3_第54张图片
部署到GPU上:
device=torch.device(‘cuda:0’)
net=MLP().to(device)

criteon=nn.CrossEntrophyLoss().to(device)

data,target=data.to(device), target.cuda()#不推荐第二个
Pytorch学习笔记3_第55张图片

MNIST test

Pytorch学习笔记3_第56张图片
softmax不会改变单调性,因此在softmax之前还是之后进行argmax效果相同
Pytorch学习笔记3_第57张图片
pred_label=pred.argmax(dim=1)可以求出predict的值
而后使用
correct=torch.eq(pred_label,label)
correct.sum().float().item()/4#item将tensor转为值

Pytorch学习笔记3_第58张图片

Visdom可视化

之前我都是使用TensorBoard:
Pytorch学习笔记3_第59张图片
Pytorch拥有TensorboardX
pip install tensorboardX

Pytorch学习笔记3_第60张图片
但是必须使用numpy数据,比较麻烦。

Visdom可以直接使用tensor数据

pip install visdom
python -m visdom.server

from visdom import Visdom

画曲线

viz=Visdom()
viz.line([0.],[0.],win='train_loss', opts-dict(title='train loss'))
viz.line([loss.item()],[global_step],win='train_loss',update='append')
#loss转换为数据,使用append防止数据被刷新。
#顺序为y,x

Pytorch学习笔记3_第61张图片
multi-traces:

viz=Visdom()
viz.line([0.],[0.],win='train_loss', opts-dict(title='train loss'))

Pytorch学习笔记3_第62张图片
Pytorch学习笔记3_第63张图片

visual X

Pytorch学习笔记3_第64张图片
viz.images(data.view(-1,1,28,28),win=‘x’)
viz.text(str(pred.detach()/cpu().numpy()),win=‘pred’,opts=dict(title=‘pred’))

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