Keras框架下的猫狗识别(三)

Tensorflow学习(使用jupyter notebook)

Keras框架下的猫狗识别(一)
Keras框架下的猫狗识别(二)


前言

紧接上文

  上文构建出最为简单的CNN神经网络模型,从而来达到大概分辨猫和狗的目的。   而在这篇博客中,我们还可以通过另外一种方法来构建模型,从而同样达到识别猫狗的目的。   在这篇博客中,我们使用VGG16-bottleneck的方法,进行猫狗的识别。

一、VGG16-bottleneck是什么?

  这里的bottleneck(瓶颈)指的是除输出层以外的神经网络。在这里,我们指的是VGG-Net模型。   VGG16是由牛津大学的K. Simonyan和A. Zisserman在“用于大规模图像识别的非常深卷积网络”的论文中提出的卷积神经网络模型。 该模型在ImageNet中实现了92.7%的前5个测试精度,这是属于1000个类的超过1400万张图像的数据集。 它是 ILSVRC-2014 提交的着名模型之一。

二、使用步骤

1.引入库

代码如下(示例):

from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import preprocess_input
import numpy as np
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from keras.utils import np_utils
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dropout, Flatten, Dense
from tensorflow.keras.optimizers import Adam
  同样的,我们也需要像之前那样操作,引入该模型训练所需要的库。    有几个搭建神经网络的常用库,就不再重复介绍。我们需要重点关注VGG16 ,因为我们所使用的VGG16来源于网络,VGG已经是一个较为完善的模型,我们只需要将其下载下来。

使用如下代码:

# 载入预训练的VGG16模型,不包括全连接层
model = VGG16(weights='imagenet', include_top=False)
  将VGG16模型下载下来,这一步需要花费一些时间,而下载下来的模型会保存在C:/user/sir/.keras/model中。我们接下来的操作就要开始围绕着VGG16模型展开。   首先使用如下代码,先看看VGG的神经层的构建:
model.summary()
  我们会得到这样的表格:

在这里插入图片描述

  可以看到VGG16的神经层,其中包括卷积层、池化层等。但也不难发现,VGG16并不具备输出层,所以这也明确了我们后续的任务——我们需要往VGG16模型中添加输出层,以满足目的。

2.读入数据

代码如下:

datagen = ImageDataGenerator(
        rotation_range = 40,      # 随机旋转角度
        width_shift_range = 0.2,  # 随机水平平移
        height_shift_range = 0.2, # 随机竖直平移
        rescale = 1./255,         # 数值归一化
        shear_range = 0.2,        # 随机裁剪
        zoom_range  =0.2,         # 随机放大
        horizontal_flip = True,   # 水平翻转
        fill_mode='nearest')      # 填充方式
        batch_size = 32
# 
train_steps = int((3528 +  batch_size - 1)/batch_size)*10
test_steps = int((1232 +  batch_size - 1)/batch_size)*10
generator = datagen.flow_from_directory(
        'train',
        target_size=(150, 150),
        batch_size=batch_size,
        class_mode=None,  # 不生成标签
        shuffle=False)    # 不随机打乱



# 得到训练集数据
bottleneck_features_train = model.predict_generator(generator, train_steps)
print(bottleneck_features_train.shape)
# 保存训练集bottleneck结果
np.save(open('bottleneck_features_train.npy', 'wb'), bottleneck_features_train)

generator = datagen.flow_from_directory(
        'test',
        target_size=(150, 150),
        batch_size=batch_size,
        class_mode=None, # 不生成标签
        shuffle=False)  # 不随机打乱
# 得到预测集数据
bottleneck_features_test = model.predict_generator(generator, test_steps)
print(bottleneck_features_test.shape)
# 保存测试集bottleneck结果
np.save(open('bottleneck_features_test.npy', 'wb'), bottleneck_features_test)


train_data = np.load(open('bottleneck_features_train.npy','rb'))
# the features were saved in order, so recreating the labels is easy
labels = np.array([0] * 2016 + [1] * 1512)
train_labels = np.array([])
    
train_labels=np.concatenate((train_labels,labels))


test_data = np.load(open('bottleneck_features_test.npy','rb'))
labels = np.array([0] * 552 + [1] * 680)
test_labels = np.array([])

test_labels=np.concatenate((test_labels,labels))


train_labels = np_utils.to_categorical(train_labels,num_classes=2)
test_labels = np_utils.to_categorical(test_labels,num_classes=2)
  即便VGG16并不具备输出层,但我们仍然可以先运行该模型,并将其保存,为后续任务节约时间。这里就是以'bottleneck_features_train.npy和bottleneck_features_test.npy的形式保存。同时,在这一步中,我们也将图片数据格式进行更改。

3.模型补充

  前面说到,VGG16模型还未具备有输出层,所以在这一步我们需要给该模型进行继续补充完善。 代码如下:
model = Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

# 定义优化器
adam = Adam(lr=1e-4)

# 定义优化器,loss function,训练过程中计算准确率
model.compile(optimizer=adam,loss='categorical_crossentropy',metrics=['accuracy'])

model.fit(train_data, train_labels,
          epochs=20, batch_size=batch_size,
          validation_data=(test_data, test_labels))

model.save_weights('bottleneck_fc_model.h5')


  在这一步中,我们继续补充完善了VGG未完成的部分,补出了输出层,并且开始训练。

在这里插入图片描述

  使用VGG16-bottleneck模型,相比于CNN简单神经网络搭建的模型,无论是速度还是准确性都大大的提高了。

总结

  综上,便是构建VGG16-bottleneck模型这一块内容的学习记录,由于博主也是刚开始学习,如有不足和问题,请指正。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程导语:    人工智能可谓是现阶段最火的行业,在资本和技术协同支持下正在进入高速发展期。当今全球市值前五大公司都指向同一发展目标:人工智能。近几年,人工智能逐渐从理论科学落地到现实中,与生活越来越息息相关,相关的各种职位炙手可热,而深度学习更是人工智能无法绕开的重要一环。 从AlphaGo打败李世石开始,深度学习技术越来越引起社会各界的广泛关注。不只学术界,甚至在工业界也取得了重大突破和广泛应用。其中应用最广的研究领域就是图像处理和自然语言处理。而要入门深度学习,CNN和RNN作为最常用的两种神经网络是必学的。网上关于深度学习的资料很多,但大多知识点分散、内容不系统,或者以理论为主、代码实操少,造成学员学习成本高。本门课程将从最基础的神经元出发,对深度学习的基础知识进行全面讲解,帮助大家迅速成为人工智能领域的入门者,是进阶人工智能深层领域的基石。 讲师简介:赵辛,人工智能算法科学家。2019年福布斯科技榜U30,深圳市海外高层次人才(孔雀人才)。澳大利亚新南威尔士大学全奖博士,SCI收录其发表过的10篇国际期刊学术文章。曾任深圳市微埃智能科技有限公司联合创始人。CSDN人工智能机器学习、深度学习方向满分级精英讲师。授课风格逻辑严谨、条理清晰、循序渐进、循循善诱,化枯燥为如沐春风,所教学生人数过万。 课程设计: 本课程分为5大模块,19小节,共计540时长(约9小时): 第一部分,课程介绍、目标与内容概览。主要学习人工智能深度学习应用场景;熟悉深度学习主流技术;掌握使用keras解决深度学习主要问题(神经网络、卷积神经网络、循环神经网络),以及深度学习主要内容:神经网络、卷积神经网络、循环神经网络;案例简介。 第二部分,深度学习之多层感知器(MLP)。主要学习多层感知器(MLP);MLP实现非线性分类;深度学习实战准备;Python调用keras实现MLP。 MLP技术点实战案例:第部分,深度学习之卷积神经网络(CNN)。主要学习卷积神经网络 ; CNN模型分析;主流CNN模型; Python调用keras实现CNN; CNN技术点实战案例:第四部分,深度学习之循环神经网络(RNN)。主要学习循环神经网络;RNN模型分析;Python调用keras实现RNN。 RNN技术点实战案例: 第五部分,综合提升。主要进行迁移学习;混合模型;实战准备+综合实战,以及最后进行课程内容总结。 混合模型技术点实战案例
### 回答1: 基于Keras猫狗识别分类是计算机视觉领域中的图像分类问题。图像分类的过程可以分为以下几个步骤。 首先,需要准备好猫狗图像的数据集。数据集应包含一定数量的猫和狗的图像,并且每个图像都需要被标记为猫或狗。这个数据集将用于模型的训练和测试。 其次,需要建立一个深度学习模型来进行图像分类。在Keras中,可以使用已经预定义好的卷积神经网络模型(如VGG16、ResNet等),也可以自定义网络结构。该模型将有助于提取图像中的特征。 然后,需要对数据集进行预处理。这包括将图像进行大小调整、归一化以及图像增强等操作。预处理有助于提高模型的训练效果和泛化能力。 接下来,将数据集划分为训练集和测试集。训练集用于模型的训练,而测试集用于评估模型的性能。通常,大部分数据被用于训练,剩余的一部分数据用于测试。 然后,使用训练集来训练模型。训练过程中,模型将通过学习样本之间的模式和特征来调整自身的权重和参数,以最小化分类误差。 最后,使用测试集来评估模型的性能。可以计算模型的准确率、精确率、召回率和F1值等指标来衡量模型的分类效果。根据评估结果,可以对模型进行调整和优化。 总之,基于Keras猫狗识别分类是通过构建深度学习模型,对图像数据进行预处理和训练,来实现对猫狗图像的分类识别。这个过程中需要合理选择模型、优化参数,以及对数据集进行合适的处理和划分,以达到高效准确地分类识别。 ### 回答2: 基于Keras猫狗识别分类是计算机视觉领域中的图像分类问题,图像分类过程十分复杂。首先,对于猫狗识别分类问题,我们需要收集大量的带有标签的猫和狗的图像数据集。这个数据集应该包含足够多的猫和狗的样本,涵盖不同种类、姿势和背景的图像。 接下来,我们需要对数据进行预处理,包括图像的大小调整、归一化处理、数据增强等。这些步骤可以提升模型的性能和泛化能力。 然后,我们使用Keras框架搭建神经网络模型。在图像分类任务中,常用的模型是卷积神经网络(CNN)。CNN模型通过一系列的卷积层、池化层和全连接层来提取图像特征和进行分类。Keras提供了简洁的API和丰富的层类型,使得模型的搭建变得简单易用。 训练模型时,我们需要将数据集分成训练集和验证集,用训练集进行模型参数的优化,验证集用于评估模型的性能和调整超参数的选择。训练过程中,我们通过设置适当的学习率、批量大小和迭代次数来优化模型。Keras提供了不同的优化器和损失函数,可以根据任务的需要进行选择。 训练完成后,我们需要对模型进行评估和测试。通过测试集对模型进行性能评估,可以得到模型的准确率、精确率、召回率等指标。如果模型满足需求,则可以将其应用于实际的猫狗图片分类任务中。 总之,基于Keras猫狗识别分类是一项挑战性的任务,需要收集和预处理大量数据,搭建合适的神经网络模型,并通过训练和评估来优化和选择模型,最终实现准确的猫狗分类。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值