激活函数:
Sigmoid函数求导
theta‘=theta(1-theta)
a=torch.linspace(-100,100,10)
torch.sigmoid(a)
pytorch自动求导:
torch.autograd.grad(mse,[w])
mse=F.mse_loss(torch.ones(1),x*w)
mse.backward()
a=torch.rand(3)
a.requires_grad_()
p=F.softmax(a,dim=0)
p.backward()
p=F.softmax(a,dim=0)
链式法则:
首先计算输出层,再计算倒数第二层,一直迭代,最后得到全部的梯度
x=np.arrange(-6,6,0.1)
np.meshgrid(x,y)
将两张map拼在一起,包含x,y的坐标
Linear:y=xw+b
for probablility output:
为什么不能直接最大化准确率?
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
nn.Linear,nn.Relu是类风格,需要先实例化
layer=nn.Relu()
x=layer(x)
为方便,可以使用x=F.relu(x,inplace=True)直接输出经过relu的x结果。
ReLU避免了梯度爆炸与消失的情况,计算更加简单
SELU:
部署到GPU上:
device=torch.device(‘cuda:0’)
net=MLP().to(device)
criteon=nn.CrossEntrophyLoss().to(device)
data,target=data.to(device), target.cuda()#不推荐第二个
softmax不会改变单调性,因此在softmax之前还是之后进行argmax效果相同
pred_label=pred.argmax(dim=1)可以求出predict的值
而后使用
correct=torch.eq(pred_label,label)
correct.sum().float().item()/4#item将tensor转为值
之前我都是使用TensorBoard:
Pytorch拥有TensorboardX
pip install tensorboardX
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
viz=Visdom()
viz.line([0.],[0.],win='train_loss', opts-dict(title='train loss'))
viz.images(data.view(-1,1,28,28),win=‘x’)
viz.text(str(pred.detach()/cpu().numpy()),win=‘pred’,opts=dict(title=‘pred’))