赞
踩
#coding=utf-8 import torch from torch import nn from torchsummary import summary from torch import optim from torchvision import datasets,transforms from torch.utils.data import DataLoader from datetime import datetime import json import warnings #忽略警告 warnings.filterwarnings('ignore') class AlexNet(nn.Module): #所有模型需要继承nn.Module类 def __init__(self,num_classes=100): #num_classes分类数量,这里随便设置了一个默认值,正常在实例化中可以更改 super(AlexNet,self).__init__() self.featrues = nn.Sequential( #卷积层(特征提取) Sequential管道,序列容器 nn.Conv2d(3,48,kernel_size=11,padding=2,stride=4,bias=True), #第一层卷积 nn.BatchNorm2d(48), #------需要训练2*48=96个参数------ #批归一化(卷积后得到的数据特征分布的均值和方差会偏大或偏小,激活和池化对特征分布影响很小,而通过这层归一化能够使数据同分布) nn.ReLU(True), #激活函数(True:relu后直接替换原值,可节省空间;False保留原值在内存中)(激活函数是用来加入非线性因素的,因为线性模型的表达能力不够) nn.MaxPool2d(3,2), #第一个最大池化层 size=3*3, stride=2 nn.Conv2d(48,128,5,padding=2,stride=1), #第二层卷积 nn.BatchNorm2d(128), #------需要训练2*128=256个参数------ #批归一化 nn.ReLU(True), #激活函数 nn.MaxPool2d(3,2), #第二个最大池化层 size=3*3, stride=2 nn.Conv2d(128,192,3,padding=1,stride=1), #第三层卷积 nn.BatchNorm2d(192), #------需要训练2*192=384个参数------ #批归一化 nn.ReLU(True), #激活函数 nn.Conv2d(192,192,3,padding=1,stride=1), #第四层卷积 nn.BatchNorm2d(192), #------需要训练2*192=384个参数------ #批归一化 nn.ReLU(True), #激活函数 nn.Conv2d(192,128,3,padding=1,stride=1), #第五层卷积 nn.BatchNorm2d(128), #------需要训练2*128=256个参数------ #批归一化 nn.ReLU(True), #激活函数 nn.MaxPool2d(3,2), #第三个最大池化层 size=3*3, stride=2 ) #output:size 6*6 chanel 128 6*6*128=4608 self.fc = nn.Sequential( #全连接层 nn.Dropout(0.2), #dropout,随机将20%置为0 nn.Linear(4608,2048), #第一层全连接,这里做了一个reshape变换,6*6*128 = 4608*1*1 = 4608,4608再到2048 nn.Sigmoid(), #Sigmoid激活(relu激活不好吗?) nn
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。