keras分类猫狗数据(下)迁移学习

41人阅读 评论(0) 收藏 举报
分类:

承接上文:
keras分类猫狗数据(上)数据预处理
keras分类猫狗数据(中)使用CNN分类模型

1 .使用keras.applications中的vgg16网络模型进行特征提取,并自定义两个全连接层输出分类。

from keras.applications import VGG16
from keras import models,layers,optimizers
from keras.callbacks import TensorBoard

conv_base=VGG16(weights='imagenet',include_top=False,input_shape=(128,128,3))

model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

conv_base.trainable=False

model.summary()

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc'])

import catvsdogs.morph as mp

model.fit_generator(
      mp.train_flow,
      steps_per_epoch=32,
      epochs=50,
      validation_data=mp.test_flow,
      validation_steps=32,callbacks=[TensorBoard(log_dir='logs/3')])
model.save_weights('outputs/weights_vgg16_use.h5')

这里写图片描述
这里写图片描述
在30多轮迭代后,测试正确率达到88%。

2 . 微调,使vgg16模型的最后一个卷积层也参与训练,本次使用上文保存的训练权重集weights_vgg16_use.h5加速训练过程,并使用较小的学习率。

from keras.applications import VGG16
from keras import models,layers,optimizers
from keras.callbacks import TensorBoard

conv_base=VGG16(weights='imagenet',include_top=False,input_shape=(128,128,3))

model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

model.load_weights('outputs/weights_vgg16_use.h5')

conv_base.trainable=True
trainable=False
for layer in conv_base.layers:
    if layer.name=='block5_conv1':
        trainable=True
    layer.trainable=trainable
model.summary()

model.compile(optimizer=optimizers.adam(lr=1e-5),loss='binary_crossentropy',metrics=['acc'])

import catvsdogs.morph as mp

history = model.fit_generator(
      mp.train_flow,
      steps_per_epoch=32,
      epochs=50,
      validation_data=mp.test_flow,
      validation_steps=32,callbacks=[TensorBoard(log_dir='logs/4')])

这里写图片描述
这里写图片描述
上图蓝色为本文过程1的,红色为过程2的,正确率到达90%。本文只使用了2000+1000的数据,迭代次数较少,如果想打算更高的识别率,可以简单修改。

查看评论

第9周:卷积神经网络分类任务和检测任务

-
  • 1970年01月01日 08:00

实战 迁移学习 VGG19、ResNet50、InceptionV3 实践 猫狗大战 问题

一、实践流程 1、数据预处理 主要是对训练数据进行随机偏移、转动等变换图像处理,这样可以尽可能让训练数据多样化 另外处理数据方式采用分批无序读取的形式,避免了数据按目录排序训练 #...
  • pengdali
  • pengdali
  • 2018-01-13 12:52:14
  • 837

使用Keras做猫狗分类

本文介绍一个图像分类问题,目标是得到输入图像的类别。使用的方法是训练卷积神经网络,数据集包括上千张猫和狗的图像。 使用的框架是Keras库,数据集下载:这里写链接内容 1下载test_set 和t...
  • poilkj110
  • poilkj110
  • 2017-12-20 14:13:43
  • 841

deeplearning练手之 transfer learning极速实现 之 猫狗分类器 (keras实现)

这是一个无聊的猫狗分类器! 这是一个transfer learning的简单试手! 原理什么乱七八糟的别人说的够多了!我看了这几个: 点击打开链接 点击打开链接 分类器我用了keras里的ResN...
  • HiccupHiccup
  • HiccupHiccup
  • 2017-12-02 15:32:12
  • 804

keras面向小数据集的图像分类(VGG-16基础上fine-tune)实现(附代码)

本文地址:http://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html ...
  • caanyee
  • caanyee
  • 2016-09-11 10:48:57
  • 23196

如何用keras cnn 做kaggle猫狗大战图片识别

1、数据简介这份数据集来源于Kaggle,原数据集有12500只猫和12500只狗,因单机cpu跑,这里我只选取了2000张图片,工具用的是基于tensorflow的keras。数据如下所示: 2、...
  • shizhengxin123
  • shizhengxin123
  • 2017-05-17 19:29:29
  • 4447

[keras]猫狗大战的总结

这篇博客主要参考的是keras官方文档中的“面向小数据集构建图像分类模型”。本文记录了学习这篇文章遇到的问题和自己探索的一些方法。官方文档的大致思路是:首先利用去掉全连接层的VGG-16网络,得到数据...
  • SMUEvian
  • SMUEvian
  • 2017-03-04 17:31:45
  • 3129

狗的分类

1、  工作组2、  运动组3、  狩猎犬组4、  更类犬组5、  玩具犬组6、  牧羊犬组7、  非运动犬组(家庭犬组)一:工作犬组1、秋田犬/Akita 2、阿拉斯加爱斯基摩狗/Alaskan M...
  • jlusdy
  • jlusdy
  • 2006-02-07 14:34:00
  • 1393

猫狗大战

小数据集的深度学习,keras
  • Kaido0
  • Kaido0
  • 2016-11-27 17:40:32
  • 4137

卷积神经网络CNN——使用keras识别猫咪

在近些年,深度学习领域的卷积神经网络(CNNs或ConvNets)在各行各业为我们解决了大量的实际问题。但是对于大多数人来说,CNN仿佛戴上了神秘的面纱。我经常会想,要是能将神经网络的过程分解,看一看...
  • qq_26222859
  • qq_26222859
  • 2017-11-19 16:50:15
  • 482
    个人资料
    持之以恒
    等级:
    访问量: 10万+
    积分: 2317
    排名: 1万+
    最新评论