利用Inception-V3训练的权重微调实现猫狗的分类,其中权重的下载在我的博客下载资源处,https://download.csdn.net/download/fanzonghao/10566634

第一种权重不改变直接用mixed7层(mixed7呆会把打印结果一放就知道了)进行特征提取,然后在拉平,连上两层神经网络

def define_model():InceptionV3_weight_path='./model_weight/inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5'pre_trained_model=InceptionV3(input_shape=(150,150,3),include_top=False,#不包含全连接层weights=None)pre_trained_model.load_weights(InceptionV3_weight_path)#下面两种取其一#仅仅用其做特征提取 不需要更新权值for layer in pre_trained_model.layers:print(layer.name)layer.trainable=False#微调权值# unfreeze=False# for layer in pre_trained_model.layers:#     if unfreeze:#         layer.trainable=True#     if layer.name=='mixed6':#         unfreeze=Truelast_layer=pre_trained_model.get_layer('mixed7')print(last_layer.output_shape)last_output=last_layer.output#以下是在模型的基础上增加的x=layers.Flatten()(last_output)x=layers.Dense(1024,activation='relu')(x)x=layers.Dropout(0.2)(x)x=layers.Dense(1,activation='sigmoid')(x)model=Model(inputs=pre_trained_model.input,outputs=x)return model

第一种完全利用Inception-V3训练的权重代码

import os
import tensorflow as tf
import matplotlib.pyplot as pltfrom keras.applications.inception_v3 import InceptionV3
from keras import  layers
from keras.models import Model
from keras.optimizers import RMSprop
from keras import backend as K
from keras.preprocessing.image import ImageDataGenerator
import data_read
"""
#获得所需求的图片--进行了图像增强
"""
def data_deal_overfit():# 获取数据的路径train_dir, validation_dir, next_cat_pix, next_dog_pix = data_read.read_data()#图像增强train_datagen=ImageDataGenerator(rescale=1./255,rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True,fill_mode='nearest')test_datagen=ImageDataGenerator(rescale=1./255)#从文件夹获取所需要求的图片train_generator=train_datagen.flow_from_directory(train_dir,target_size=(150,150),batch_size=20,class_mode='binary')test_generator = test_datagen.flow_from_directory(validation_dir,target_size=(150, 150),batch_size=20,class_mode='binary')return train_generator,test_generator
"""
#定义模型并加入了dropout
"""
def define_model():InceptionV3_weight_path='./model_weight/inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5'pre_trained_model=InceptionV3(input_shape=(150,150,3),include_top=False,#不包含全连接层weights=None)pre_trained_model.load_weights(InceptionV3_weight_path)#下面两种取其一#仅仅用其做特征提取 不需要更新权值for layer in pre_trained_model.layers:print(layer.name)layer.trainable=False#微调权值# unfreeze=False# for layer in pre_trained_model.layers:#     if unfreeze:#         layer.trainable=True#     if layer.name=='mixed6':#         unfreeze=Truelast_layer=pre_trained_model.get_layer('mixed7')print(last_layer.output_shape)last_output=last_layer.output#以下实在模型的基础上增加的x=layers.Flatten()(last_output)x=layers.Dense(1024,activation='relu')(x)x=layers.Dropout(0.2)(x)x=layers.Dense(1,activation='sigmoid')(x)model=Model(inputs=pre_trained_model.input,outputs=x)return model"""
训练模型
"""
def train_model():model=define_model()model.compile(optimizer=RMSprop(lr=0.001), loss='binary_crossentropy', metrics=['accuracy'])train_generator, test_generator = data_deal_overfit()# verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录# 训练模型 返回history包含各种精度和损失history = model.fit_generator(train_generator,steps_per_epoch=100,  # 2000 images=batch_szie*stepsepochs=50,validation_data=test_generator,validation_steps=50,  # 1000=20*50verbose=2)#精度acc=history.history['acc']val_acc=history.history['val_acc']#损失loss=history.history['loss']val_loss=history.history['val_loss']#epochs的数量epochs=range(len(acc))plt.plot(epochs,acc)plt.plot(epochs, val_acc)plt.title('training and validation accuracy')plt.figure()plt.plot(epochs, loss)plt.plot(epochs, val_loss)plt.title('training and validation loss')plt.show()if __name__ == '__main__':train_model()
打印结果:其中这些代表每一层的名字,直接利用mixed7的特征,(none,7,7,768)就是该层的shape, 直接拉平,添加两层神经网络进行分类。

打印结果:这是每一层的名字,mixed7层的shape是(None,7,7,768)第一种做法就是直接利用该层及之前层的权重进行训练分类的。

第二种:进行微调要不是需要对整个权重都进行重新赋值,因为前面层数学习到的特征是一些简单的特征,只是随着层数增强才更加具有针对性,故把mixed7层的卷积层权重 重新训练,代码:

unfreeze=False
for layer in pre_trained_model.layers:if unfreeze:layer.trainable=Trueif layer.name=='mixed6':unfreeze=True

也就是把我上段完整的代码注释替换一下即可。

利用Inception-V3训练的权重微调,实现猫狗分类(基于keras)相关推荐

  1. 图像语义分割python_图像语义分割 —利用Deeplab v3+训练VOC2012数据集

    原标题:图像语义分割 -利用Deeplab v3+训练VOC2012数据集 前言: 配置:windows10 + Tensorflow1.6.0 + Python3.6.4(笔记本无GPU) 源码: ...

  2. 神经网络学习小记录19——微调VGG分类模型训练自己的数据(猫狗数据集)

    神经网络学习小记录19--微调VGG分类模型训练自己的数据(猫狗数据集) 注意事项 学习前言 什么是VGG16模型 VGG模型的复杂程度 训练前准备 1.数据集处理 2.创建Keras的VGG模型 3 ...

  3. DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)

    DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型) 目录 利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型) 设计思路 处 ...

  4. python 动物分类_《python深度学习》笔记---5.3-1、猫狗分类(使用预训练网络)

    <python深度学习>笔记---5.3-1.猫狗分类(使用预训练网络) 一.总结 一句话总结: [小型图像数据集]:想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训 ...

  5. 神经网络学习小记录17——使用AlexNet分类模型训练自己的数据(猫狗数据集)

    神经网络学习小记录17--使用AlexNet分类模型训练自己的数据(猫狗数据集) 学习前言 什么是AlexNet模型 训练前准备 1.数据集处理 2.创建Keras的AlexNet模型 开始训练 1. ...

  6. Keras深度学习使用VGG16预训练神经网络实现猫狗分类

    Keras深度学习使用VGG16预训练神经网络实现猫狗分类 最近刚刚接触深度学习不久,而Keras呢,是在众多的深度学习框架中,最适合上手的,而猫狗的图像分类呢,也算是计算机视觉中的一个经典案例,下面 ...

  7. 深度学习笔记13_猫狗分类案例 - 从头开始训练一个神经网络

    在小型数据集上从头开始训练一个卷积神经网络 小型数据集的模型构建的策略 小型数据集:"很少的"样本可能是几百张图像,也可能是几万张图像. 接下来的示例中,主要用来猫狗分类:4000 ...

  8. tensorflow.js在nodejs训练猫狗分类模型在浏览器上使用

    目录 本人系统环境 注意事项 前言 数据集准备 处理数据集 数据集初步处理 将每一张图片数据转换成张量数据(tensor) 将图片转换成张量数组的代码和运行效果 将图片的标注转换成张量数据(tenso ...

  9. ResNet-50 训练猫狗分类

    ResNet-50 训练猫狗分类 1.ResNet网络 2.猫狗数据 3.训练 4.测试 这里介绍一下怎么搭建ResNet网络,并说明一下残差网络的结构,并使用ResNet来训练一个二分类问题 1.R ...

最新文章

  1. 深圳速度!这所筹建中的大学,迎来首任“掌门人”!
  2. 每日一皮:从项目的开始到结束,开发人员的变化...
  3. win7台式电脑怎么连wifi_台式电脑怎么用wifi网络
  4. THEOS的第一个TWeak的成功创建
  5. python svm 实战_opencv-python 入门实战:传统方法Hog+svm实现目标检测
  6. 找2个数组中相同的数
  7. 创建自己的Convers. Routine.
  8. Microsoft Visual Studio Ultimate 2013密钥
  9. SQL Server 中WITH (NOLOCK)
  10. android动画实现单摆效果
  11. Unity3D卡牌手游《X三国》源码前后端完整下载安卓+IOS双端
  12. 游戏服务器高性能设计-游戏设计与开发(3)
  13. Turorial_JTF_GRID
  14. web 服务器有哪些
  15. 2010提升你幽默感的语句
  16. VScode配置C++环境
  17. 技法の穴をふさぐ:コスト編 --人月単価は案件ごとにバラバラ公表データで相場を知る
  18. 三口烧瓶规格有哪些_什么是三口烧瓶,应该如何制作 | | 化工资讯网
  19. 自媒体多平台多账号群发工具开发日记:第1天 工具的统筹规划
  20. VS2005下MFC开发的ActiveX控件的部分总结 inf 篇

热门文章

  1. 拍不完的脑袋:推荐系统打压保送重排策略
  2. positional encoding位置编码详解:绝对位置与相对位置编码对比
  3. 拼写校正与动态规划的小故事
  4. 论文浅尝 | KGQR: 用于交互式推荐的知识图谱增强Q-learning框架
  5. 观点 | 抛开炒作看知识图谱,为什么现在才爆发?
  6. Tensorflow2.0模型构建与训练
  7. 阿里云数据库Mysql被黑
  8. 5 计算机组成原理第四章 指令系统
  9. hadoop碰到的 一个问题
  10. 【测试设计】基于正交法的测试用例设计工具--PICT