神经网络层级-CNN为例
1、普通的CNN层级
①输入层,若干矩阵
②卷积层+激活函数Relu
③池化层
④全连接层 单层为wx+b线性层+激活函数sigmoid
⑤输出层 最后一层为wx+b的线性层+softmax层
结果就是最大值所在索引
即:我们以前在做分类任务的时候,例如手写数字识别,最后一层有两种习惯:
- 使用softmax层,转化为各个类别概率,这种情况,你应该紧接着使用CrossEntropyLoss损失函数。
- 使用log_softmax层,那么使用NLLLOSS最好而且最直接。
使用log_softmax等的作用就是防止计算溢出。
import torch import torch.nn as nn import torch.nn.functional as F shape=(100,64,64,) xb=torch.rand(shape) print(xb.shape) xb=xb.view(100,-1,64,64) print(xb.shape) #第一层卷积 cov1=nn.Conv2d(1,64,kernel_size=3, stride=2, padding=1) print(cov1.parameters) xb_cov1=F.relu(cov1(xb)) print(xb_cov1.shape) #第二层卷积 cov2=nn.Conv2d(64,64,kernel_size=3, stride=2, padding=1) xb_cov2=F.relu(cov2(xb_cov1)) print(xb_cov2.shape) #第三层卷积 cov3=nn.Conv2d(64,10,kernel_size=3, stride=2, padding=1) xb_cov3=F.relu(cov3(xb_cov2)) print(xb_cov3.shape) #池化层 xb_pool=F.avg_pool2d(xb_cov3,2) print(xb_pool.shape) #将二维数据转成一维 xb_pool=xb_pool.view(100,-1,16) print(xb_pool.shape) #线性函数 lin=nn.Linear(16,1) xb_lin=lin(xb_pool) print(xb_lin.shape) #输出层 soft_max=F.softmax(xb_lin,dim=1) print(soft_max.shape) print(soft_max)
啥也不是