InceptionV3模型介绍+参数设置+迁移学习方法

在这里插入图片描述

选择卷积神经网络也面临着难题,首先任何一种卷积神经网络都需要大量的样本输入,而大量样本输入则对应着非常高的计算资源需求,而结合本文的数据集才有80个样本这样的事实,选择一种少量数据集下表现优秀的卷积神经网络就成了关键点。
目前业界针对小数据集进行卷积神经网络训练提出的主流方式是迁移学习(transfer learning)。该方法的思想是使用大数据集进行模型训练,然后使用训练好的参数对小样本进行参数微调,这样使得最终训练出来的模型具有小数据集和高精度的双重优势,由此可见本文数据集上理想的解决方案即是:迁移学习+参数微调。
迁移学习目前网络上提供的模型较多,综合考虑模型参数量、模型表现、模型可得性、模型训练计算资源需求量、模型易用性等因素,本文选择了Google开源的Inception-v3模型作为迁移学习的框架,该框架在ImageNet数据集上进行训练,该数据集有着1000个类别超过100万张的图片数据,该模型在ImageNet数据集上获得了优秀的表现。
模型构建
选择了Inception-v3模型后,本文的做法是将该模型瓶颈层的输出作为提取的特征,然后把这些特征经过一个全连接层进行分类,Inception-v3模型示意图如下:在这里插入图片描述

在上图中最右边示意的Bottleneck feature 位置即是特征输出的位置,也就是说该模型的最后三层被丢弃,然后瓶颈层的结果作为本文新模型的特征提取结果,该结果是2048长度的特征向量。
获得该特征向量之后,需要将其输入一个全连接层进行分类,全连接层的模型示意图如下:
在这里插入图片描述

感觉用起来和VGG16并没有太大区别

参数设置

**验证集测试集百分比:**验证集用于在训练过程中实时测试模型的训练效果,而测试集则用于在最后测试模型的正确率。本文中每个类别的图像数量在300到500数量级,考虑到验证集和测试集需要能测试模型的效果,因而数据量不可太少,同时为了有效利用数据进行训练,则也不能划分太多数据出去,故而综合衡量之后选择以数据的10%作为验证集和测试集。

**训练次数(epoch):**训练次数即对模型进行多少次的训练,训练次数太少分类效果差,但是训练次数太多则会导致浪费时间,在本文中,先使用一个较小的数据量进行试训练,经过观察发现10000次的训练次数基本能让模型达到训练稳定,故而综合考虑后选择10000次作为训练次数。

学习率:学习率是在训练过程中对权重进行调整的一个比例因子,太大的学习率会导致模型波动不能收敛,甚至无法收敛,而太小的学习率则让模型收敛过慢,浪费训练时间和计算资源,在本文中,先使用一个较大的学习率(0.1)进行测试,然后不断减小,最终选用了一种指数下降的学习率,其衰减公式为:
上式中,LR(Learning Rate)代表学习率;BLR(Base Learning Rate)代表基础学习率,本文取0.1;MLR(Minimum Learning Rate)代表最小学习率,即学习率衰减的最低限度,本文取0.001;STEPS即是训练的次数,本文统一取为10000次,i是当前训练次数,从0开始到9999。

Batch_Size(批尺寸):在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;小数据集一般一开始就全部放进去了

在这里插入图片描述

两种迁移学习的方式

或者这样(官方)

for layer in model.layers[:249]:
   layer.trainable = False
for layer in model.layers[249:]:
   layer.trainable = True

抽取中间某层特征

from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np

base_model = VGG19(weights='imagenet')
model = Model(inputs=base_model.input, outputs=base_model.get_layer('block4_pool').output)

img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

block4_pool_features = model.predict(x)#把该图像输入model
  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PyTorch迁移学习InceptionV3是一种利用预训练的InceptionV3模型来进行迁移学习方法。通过在预训练模型的基础上进行微调,可以快速地训练出一个适用于新任务的模型。在使用PyTorch进行迁移学习时,可以使用torchvision包中的inception_v3模型,并根据需要修改模型的最后一层,以适应新任务的分类要求。同时,还需要对数据进行预处理和数据增强等操作,以提高模型的性能。 ### 回答2: PyTorch是目前非常流行的深度学习框架之一,擅长在计算机视觉、自然语言处理等领域中应用。而迁移学习是深度学习领域中常用的技术,可以通过利用已有模型的知识来快速搭建和训练新模型,避免从头开始训练模型所需的大量时间和计算资源。 Inceptionv3是谷歌开发的一种卷积神经网络结构,在图像识别和分类领域中取得了优秀的成绩。将迁移学习Inceptionv3结合,可以快速搭建一个在新数据集上得分较高的图像分类器。 在使用PyTorch进行迁移学习前,我们需要先准备好数据集。通常情况下,我们会将数据集分为训练集、验证集和测试集。在本次实例中,我们将使用PyTorch内置的ImageFolder类读取数据集。ImageFolder类可以自动识别图片所在的类别,并将其作为类别标签。 接下来,我们需要准备Inceptionv3模型。PyTorch已经为我们提供了许多预训练模型,包括Inceptionv3。我们可以通过一行代码来加载该模型: ``` python model_ft = models.inception_v3(pretrained=True) ``` 这里使用的是预训练的Inceptionv3模型,并且设置数pretrained=True来下载预训练的模型数。在此基础上,我们可以将Inceptionv3模型的最后一层替换为我们想要的输出层。在此实例中,我们需要输出两个类别,因此可以这样操作: ``` python num_ftrs = model_ft.fc.in_features model_ft.fc = nn.Linear(num_ftrs, 2) ``` 这里通过获取模型的fc层的输入特征数,将fc层替换为一个输出为两个类别的全连接层。 最后,我们需要定义损失函数和优化器,并进行模型的训练。在训练的过程中,使用PyTorch内置的DataLoader类可以方便地对数据进行批处理,更好地利用计算资源。训练完毕后,我们可以使用测试集对模型进行测试,并得到模型在测试集上的准确率。 通过上述步骤,我们可以在PyTorch中使用Inceptionv3模型进行迁移学习,并快速搭建一个高精度的图像分类器。 ### 回答3: 迁移学习是指通过利用已经训练好的模型数,来完成新任务的学习。PyTorch是一个开源的深度学习框架,其中包含了很多已经预训练好的模型,其中之一就是InceptionV3InceptionV3是一个流行的图像分类模型,它由Google团队开发,已经在ImageNet数据集上训练好。利用这个已经训练好的模型来完成一个新的任务,需要进行以下步骤: 1. 数据准备 首先,需要收集新的数据集,并将其分为训练集、验证集和测试集。新的数据集应该与模型预训练的数据集类似。 2. 模型调整 接着,需要调整模型,使其适应新的任务。对于InceptionV3,可以通过修改最后一层全连接层的输出单元数,来适应新的分类任务。也可以冻结模型的前面几层,只训练最后几层。 3. 训练模型 然后,需要对模型进行训练。可以使用已经训练好的模型数作为初始值,以加快训练速度,并提高模型的性能。 4. 模型评估 在模型训练完成之后,需要对其进行评估。可以使用验证集来评估模型性能,计算模型的准确率、召回率等指标。 5. 模型优化 根据模型评估结果,可以对模型进行优化,调整模型结构、超数等。 6. 模型测试 最后,可以使用测试集来测试模型的性能,并计算其准确率、召回率等指标。 总之,在PyTorch中进行迁移学习以及使用InceptionV3模型来完成新的任务,需要进行数据准备、模型调整、模型训练、模型评估、模型优化和模型测试等多个步骤。但是通过利用已经训练好的模型数,可以大大减少训练时间,提高模型的效率和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值