Pytorch从入门到放弃(3)——迁移学习(基于AlexNet的蜜蜂和蚂蚁分类)

         AlexNet是2012年的经典网络结构,日常实验这个模型基本就能满足需求。本人,十分偏爱这个网络模型,也许是上了岁数吧,老年人比较怀旧。文章下面介绍如何使用Pytorch来实现网络模型的精调,续上一篇博文实现基于AlexNet的蜜蜂和蚂蚁的分类,数据集下载和数据的预处理参见上一篇博文。

实现迁移学习之前,首先我们读取一下Pytorch封装的AlexNet所包含的网络结构:read_AlexNet_structure.py

import torchvision.models as models

# 导入Pytorch所封装的AlexNet模型
model = models.alexnet(pretrained=True)

# model.features存储的是网络模型的前半部分
# 即卷积层与池化层部分
model_features = list(model.features.children())
for feature in model_features:
    print (feature)
# model.classifier存储的是模型的后半部分
# 即全连接层部分
model_classifier = list(model.classifier.children())
for classifier in model_classifier:
    print (classifier)

前半部分的网络结构:

后半部分的网络结构:

定义网络结构,实现基于AlexNet的精调,finetune_with_AlexNet.py。

from __future__ import print_function, division

import torch
import torch.nn as nn
from torch.optim import lr_scheduler
from torchvision import datasets, models, transforms
import time
import os
import copy

# 是否使用gpu运算
use_gpu = torch.cuda.is_available()
# 数据预处理
data_transforms = {
    'train': transforms.Compose([
        # 随机在图像上裁剪出224*224大小的图像
        transforms.RandomResizedCrop(224),
        # 将图像随机翻转
        transforms.RandomHorizontalFlip(),
        # 将图像数据,转换为网络训练所需的tensor向量
        transforms.ToTensor(),
        # 图像归一化处理
        # 个人理解,前面是3个通道的均值,后面是3个通道的方差
        transforms.Normalize([0.485, 0.456, 0.406], [
  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值