1.网络结构
github代码 pytorch搭建经典网络模型
数据集 http://download.tensorflow.org/example_images/flower_photos.tgz
将数据集执行split_data.py脚本自动将数据集划分成训练集train和验证集val
|—— flower_data
|———— flower_photos(解压的数据集文件夹,3670个样本)
|———— train(生成的训练集,3306个样本)
|———— val(生成的验证集,364个样本)代码相应部分:https://blog.csdn.net/com_fang_bean/article/details/108479808
1.model.py
import torch.nn as nn
import torch
import torch.nn.functional as F
# 4.定义googlenet网络
# aux_logits=True:使用辅助分类器。
# init_weights=False:初始化权重。
# self.aux_logits = aux_logits->把是否使用辅助分类器传入到类变量当中。
# ceil_mode=True->代表卷积后参数向上取整
class GoogLeNet(nn.Module):
def __init__(self, num_classes=1000, aux_logits=True, init_weights=False):
super(GoogLeNet, self).__init__()
self.aux_logits = aux_logits
self.conv1 = BasicConv2d(3, 64, kernel_size=7, stride=2, padding=3)
self.maxpool1 = nn.MaxPool2d(3, stride=2, ceil_mode=True)
self.conv2 = BasicConv2d(64, 64, kernel_size=1)
self.conv3 = BasicConv2d(64, 192, kernel_size=3, padding=1)
self.maxpool2 = nn.MaxPool2d(3, stride=2, ceil_mode=True)
# 按照inception结构(该层输入大小[上层输出大小],1x1,3x3reduce,3x3,5x5reduce,5x5)来写
self.inception3a = Inception(192, 64, 96, 128, 16, 32, 32)
self.inception3b = Inception(256, 128, 128, 192, 32, 96, 64)
self.maxpool3 = nn.MaxPool2d(3, stride=2, ceil_mode=True)
self.inception4a = Inception(480, 192, 96, 208, 16, 48, 64)
self.inception4b = Inception(512, 160, 112, 224, 24, 64, 64)
self.inception4c = Inception(512, 128, 128, 256, 24, 64, 64)
self.inception4d = Inception(512, 112, 144, 288, 32, 64, 64)
self.inception4e = Inception(528, 256, 160, 320, 32, 128, 128)
self.maxpool4 = nn.MaxPoo