本博文涉及以下:五
目录:Zero:导入数据集一、检测人脸二、检测狗狗三、从头实现CNN实现狗狗分类四、迁移VGG16实现狗狗分类五、迁移ResNet_50实现狗狗分类六、自己实现狗狗分类

五、使用ResNet_50来区分狗的品种

现在你将使用迁移学习来建立一个CNN,从而可以从图像中识别狗的品种。你的 CNN 在测试集上的准确率必须至少达到60%。

在步骤4中,我们使用了迁移学习来创建一个使用基于 VGG-16 提取的特征向量来搭建一个 CNN。在本部分内容中,你必须使用另一个预训练模型来搭建一个 CNN。为了让这个任务更易实现,我们已经预先对目前 keras 中可用的几种网络进行了预训练:

  • VGG-19 bottleneck features
  • ResNet-50 bottleneck features
  • Inception bottleneck features
  • Xception bottleneck features

这些文件被命名为为:

Dog{network}Data.npz

其中 {network} 可以是 VGG19Resnet50InceptionV3 或 Xception 中的一个。选择上方网络架构中的一个,下载相对应的bottleneck特征,并将所下载的文件保存在目录 bottleneck_features/ 中。

1、获取模型特征向量

## TODO: ResNet-50的CNN获取bottleneck特征
bottleneck_features = np.load('bottleneck_features/DogResnet50Data.npz')
train_Resnet50 = bottleneck_features['train']
valid_Resnet50 = bottleneck_features['valid']
test_Resnet50 = bottleneck_features['test']

2、模型建立、编译、训练和测试

### TODO: 定义你的框架
Resnet50_model = Sequential()
Resnet50_model.add(GlobalAveragePooling2D(input_shape=train_Resnet50.shape[1:]))
Resnet50_model.add(Dense(133, activation='softmax'))Resnet50_model.summary()

### TODO: 编译模型
Resnet50_model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
### TODO: 训练模型
checkpointer = ModelCheckpoint(filepath='saved_models/weights.best.Resnet50.hdf5', verbose=1, save_best_only=True)Resnet50_model.fit(train_Resnet50, train_targets, validation_data=(valid_Resnet50, valid_targets),epochs=20, batch_size=20, callbacks=[checkpointer], verbose=1)
### TODO: 加载具有最佳验证loss的模型权重
Resnet50_model.load_weights('saved_models/weights.best.Resnet50.hdf5')
### TODO: 在测试集上计算分类准确率
Resnet50_predictions = [np.argmax(Resnet50_model.predict(np.expand_dims(feature, axis=0))) for feature in test_Resnet50]# 报告测试准确率
test_accuracy = 100*np.sum(np.array(Resnet50_predictions)==np.argmax(test_targets, axis=1))/len(Resnet50_predictions)
print('Test accuracy: %.4f%%' % test_accuracy)

3、使用模型预测狗的品种

实现一个函数,它的输入为图像路径,功能为预测对应图像的类别,输出为你模型预测出的狗类别(AffenpinscherAfghan_hound 等)。

与步骤5中的模拟函数类似,你的函数应当包含如下三个步骤:

  1. 根据选定的模型载入图像特征(bottleneck features)
  2. 将图像特征输输入到你的模型中,并返回预测向量。注意,在该向量上使用 argmax 函数可以返回狗种类的序号。
  3. 使用在步骤0中定义的 dog_names 数组来返回对应的狗种类名称。

提取图像特征过程中使用到的函数可以在 extract_bottleneck_features.py 中找到。同时,他们应已在之前的代码块中被导入。根据你选定的 CNN 网络,你可以使用 extract_{network} 函数来获得对应的图像特征,其中 {network} 代表 VGG19Resnet50InceptionV3, 或 Xception 中的一个。

### TODO: 写一个函数,该函数将图像的路径作为输入
### 然后返回此模型所预测的狗的品种
from extract_bottleneck_features import *def Resnet50_predict_breed(img_path):# 提取bottleneck特征bottleneck_feature = extract_Resnet50(path_to_tensor(img_path))# 获取预测向量predicted_vector = Resnet50_model.predict(bottleneck_feature)# 返回此模型预测的狗的品种return dog_names[np.argmax(predicted_vector)]

【深度学习图像识别课程】毕业项目:狗狗种类识别(3)代码实现相关推荐

  1. 【深度学习图像识别课程】毕业项目:狗狗种类识别(2)代码实现

    本博文涉及以下:Zero/一/二/三/四 目录:Zero:导入数据集一.检测人脸二.检测狗狗三.从头实现CNN实现狗狗分类四.迁移VGG16实现狗狗分类五.迁移ResNet_50实现狗狗分类六.自己实 ...

  2. 【深度学习图像识别课程】毕业项目:狗狗种类识别(1)环境准备

    项目要求: 卷积神经网络(CNN)项目,建立一个处理现实生活中的,用户提供的图像的算法.给你一个狗的图像,你的算法将会识别并估计狗的品种,如果提供的图像是人,代码将会识别最相近的狗的品种. 项目的 g ...

  3. 深度学习 免费课程_深入学习深度学习,提供15项免费在线课程

    深度学习 免费课程 by David Venturi 大卫·文图里(David Venturi) 深入学习深度学习,提供15项免费在线课程 (Dive into Deep Learning with ...

  4. Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集

    Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集 一.相关介绍 二.下载数据集 三.代码示例 1.导入keras库,并显示版本号 2.构建网络 3.数据预处理 4.使用数据增强 四.使用 ...

  5. NLP机器翻译深度学习实战课程基础 | 深度应用

    作者 | 小宋是呢 来源 | CSDN博客 0.前言 深度学习用的有一年多了,最近开始 NLP 自然处理方面的研发.刚好趁着这个机会写一系列 NLP 机器翻译深度学习实战课程. 本系列课程将从原理讲解 ...

  6. AI开学第一课!CMU深度学习秋季课程开课了(附PPT 、视频)

    来源:新智元 本文约1000字,建议阅读5分钟. 本课程内容涵盖了深度学习的基础内容,以及较新的强化学习.GAN等. [ 导读 ]CMU深度学习秋季课程开课了!课程的主讲老师是深度学习大牛.CMU计算 ...

  7. 深度学习 免费课程_2020年排名前三的免费深度学习课程

    深度学习 免费课程 #1 Fastai面向程序员的实用深度学习2020 (#1 Fastai Practical Deep Learning for Coders 2020) On 21 of Aug ...

  8. 区域转换为二值图像_零基础一文读懂AI深度学习图像识别

    #寻找真知派# #科学思维看百态# #深度学习 图像识别# 人工智能大常识(2):图像识别(以手写字符识别为例) 近期写一组关于人工智能的科普帖子.第一帖介绍了AI自动诊断的方法,本帖之后准备继续推出 ...

  9. 『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)

    0.前言 深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内 ...

最新文章

  1. vue 发展历程时间轴动画_PPT时间轴如何做出创意感?海量素材免费分享,网友:收藏...
  2. 怎样操作vue.js使用3DES加密
  3. SpringBoot笔记:SpringBoot集成SpringbootAdmin监控
  4. 组合数(Combinatorial_Number)
  5. usaco1.2.2 transform
  6. Google: 如何做code review?
  7. [html] websocket握手成功会返回一个干什么状态吗?是200吗
  8. 关系与普通表的术语比较
  9. IoT -- (一) 物联网平台架构设计分析
  10. hover事件注册实例一枚
  11. 最短Hamilton路径(位运算基本思路)
  12. leetcode题库1277-- 统计全为 1 的正方形子矩阵
  13. 为什么这本书大家都称好
  14. python 根据对应关系批量修改文件名
  15. YUV420 总结 (YU12、YV12、NV12 和 NV21)
  16. VMware vSphere 8 发布(含下载)
  17. 转载一篇过来人谈的大学期间关于课外学习的意见lt;出自左飞老师笔记gt;
  18. Linux报错:tar: Error Is Not Recoverable: Exiting Now
  19. cj.exceptions.CJException: Access denied for user XX to database 问题解决记录
  20. Project 的简单使用

热门文章

  1. java long 和long_java中Long和long的区别
  2. 《Semi-Supervised Semantic Segmentation with Cross-Consistency Training》 2020CVPR 论文阅读
  3. NVIDIA/apex报错解决过程
  4. ApiPost与PostMan,你可以任选一款不错的接口管理工具
  5. centos怎么卸载mysql
  6. 一篇文章带你了解云计算
  7. 第47章 QR-Decoder-OV5640二维码识别—零死角玩转STM32-F429系列
  8. OpenAI CEO Sam Altman:巨型 AI 模型时代即将终结!
  9. 瞬间“友尽”的五大整蛊代码,快去坑你的小伙伴吧!
  10. 基于Java的设计管理系统