神经网络层级-CNN为例

1、普通的CNN层级

①输入层,若干矩阵

②卷积层+激活函数Relu

③池化层

④全连接层  单层为wx+b线性层+激活函数sigmoid

⑤输出层 最后一层为wx+b的线性层+softmax层

结果就是最大值所在索引

 

即:我们以前在做分类任务的时候,例如手写数字识别,最后一层有两种习惯:

  1. 使用softmax层,转化为各个类别概率,这种情况,你应该紧接着使用CrossEntropyLoss损失函数。
  2. 使用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)

 

 

posted @ 2023-02-21 16:57  拔河先生  阅读(53)  评论(0编辑  收藏  举报