Applications包里有很多深度学习经典模型,且有预训练好的权重。

这些模型可以轻松用于:

  • 预测
  • 特征提取
  • 微调

这些预训练权重会在实例化模型时自动下载,且放置在~/.keras/models文件夹下。

对于图像识别任务,有下面这些模型可用:

  • Xception
  • VGG16
  • VGG19
  • ResNet50
  • InceptionV3
  • InceptionResNetV2
  • MobileNet
  • DenseNet
  • NASNet
  • MobileNetV2

Keras相当于前端,后端会用TensorflowPyTorch等运行,配置Keras的文件是~/.keras/keras.json,示例内容如下:

{"floatx": "float32","epsilon": 1e-07,"backend": "tensorflow","image_data_format": "channels_last"
}

上面这个文件里有个参数image_data_format表示图片格式,指定为通道最后时,图片格式就是Height-Width-Depth这样的顺序。

第一个示例:使用ResNet50识别大象

from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as npmodel = ResNet50(weights='imagenet')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)preds = model.predict(x)
# decode the results into a list of tuples (class, description, probability)
# (one such list for each sample in the batch)
print('Predicted:', decode_predictions(preds, top=3)[0])# Predicted: [('n02504458', 'African_elephant', 0.72483104), ('n01871265', 'tusker', 0.24834009), ('n02504013', 'Indian_elephant', 0.024910495)]

第二个示例:使用VGG16提取特征

# VGG16提取特征
from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_inputimport numpy as np

对比两个例子,可以看到Keras的模型使用方法是有套路的。
首先从keras.applications.modelName导入模型名,比如VGG16,接着导入预处理包,这些任务主要针对的是图片,所以导入的是image,然后要对输入进行预处理,不同的模型需要的预处理不同,从keras.applications.modelName导入preprocess_input即可。

另外,numpy是必不可少的东西。

现在我们可以实例化模型并利用模型进行数据的提取了:

model = VGG16(weights='imagenet', include_top=False) # 此时会去下载权重# 对数据进行处理
img = image.load_img(image_path, target_size=(224,224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)features = model.predict(x)
print(features)

打印时可以看出提取出来的是数组形式的特征,对比两个案例,可以看出,一个用了ResNet50,一个用了VGG16,前者直接输出预测结果,后者只是输出特征。

区别在哪里呢?

其实就一行,在实例化模型的时候,有没有include_top=False

默认情况下,这个值为True,就是可以得到的结果解析出来就是我们的目的值。现在详细说一下。

Keras提供的这些模型,都是CNN模型,一系列的卷积层 + 一层或多层全连接层,include_top这个参数可以控制的是,到底要不要最后的这些全连接层。注意,如果是False最后的全部全连接层都不要

只要这样,才能把这些模型当做特征提取器来用。模型的两大组成部分,分别有如下的功能:

  • 卷积层:用于特征提取,从图片中识别出各种模式
  • 全连接层:用于解释这些卷积层发现的模式,比如输出类别

关于权重,卷积层的权重是固定的,等于卷积核大小x卷积核个数,与输入无关。

而全连接层则与输入有关,一个输入元素对应一个权重。

如何得到指定层的输出

from keras.models import Modelmodel = ...  # 初始模型
layer_name = 'my_layer' # 给定待输出的层的名字
intermediate_layer_model = Model(inputs=model.input,outputs=model.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)

或者构建一个函数,用于输出指定层的输出:

from keras import backend as K
# with a Sequential model
get_3rd_layer_output = K.function([model.layers[0].input],[model.layers[3].output])
layer_output = get_3rd_layer_output([x])[0]

所以下面这个例子,提取任意的中间层的特征,用的也是上面这个方法:

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 npbase_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)

这里的任意层用的是名为block4_pool的层。

其实这个没有什么特殊的,对图片进行特征提取,输入的是图片,现在对任意层的输出进行特征提取,从张量的角度看并无不同。

END.

【3】Keras.applications包,一堆可以复用的深度学习模型库相关推荐

  1. Keras快速上手:基于Python的深度学习

    Keras快速上手:基于Python的深度学习 谢梁,鲁颖,劳虹岚 著 ISBN:9787121318726 包装:平装 开本:16开 正文语种:中文 出版社: 电子工业出版社 出版时间:2017-0 ...

  2. 深度学习系列笔记——贰 (基于Tensorflow2 Keras搭建的猫狗大战模型 三)

    深度学习系列笔记--贰 (基于Tensorflow Keras搭建的猫狗大战模型 一) 深度学习系列笔记--贰 (基于Tensorflow Keras搭建的猫狗大战模型 二) 前面两篇博文已经介绍了如 ...

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

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

  4. Keras还是TensorFlow?深度学习框架选型实操分享

    译者| 王天宇.林椿眄 责编| Jane.琥珀 出品| AI科技大本营 深度学习发展势头迅猛,但近两年涌现的诸多深度学习框架让初学者无所适从.如 Google 的 TensorFlow.亚马逊的 MX ...

  5. 在Ubuntu上安装Keras深度学习框架

    目录 1)安装pip 2)安装Python科学套件 3)安装TensorFlow 4)安装keras 5)安装Jupyter Notebook 6)运行Keras 本文介绍如何在Ubuntu上安装Ke ...

  6. 深度学习框架Keras的安装

    原文链接:https://blog.csdn.net/qingzhuochenfu/article/details/51187603 本人已经将最新博客更新转移至个人网站了,欢迎来访~~ SCP-17 ...

  7. GitChat · 人工智能 | 如何零基础用 Keras 快速搭建实用深度学习模型

    GitChat 作者:谢梁 原文: 如何零基础用 Keras 快速搭建实用深度学习模型 关注微信公众号:GitChat 技术杂谈 ,一本正经的讲技术 [不要错过文末活动] 前言 在这篇小文章中,我们将 ...

  8. Part1:使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习——计算机图形学世界中相机的工作原理

    Part1:使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习 1. 效果图 2. 原理 2.0 前向成像模型 2.1 世界坐标系 2.2 相机坐标系 2.3 坐标变换 2 ...

  9. 深度学习和Keras 简介

    随着近年来人工智能(AI)技术的大热,相信读者们对"人工智能""机器学习" 和"深度学习"这几个词汇已经耳熟能详.那么,这三者之间是什么关系 ...

最新文章

  1. linux——grep 文本过滤器
  2. linux学习笔记(五):开机、关机、开机日志
  3. 基于Java的设计开题报告_基于Java的电子邮件的收发系统的设计与实现开题报告...
  4. Android深度探索(卷1)HAL与驱动开发 读书笔记(第四章)
  5. 二分图匹配----匈牙利算法之二
  6. AES方式加解密的简单介绍
  7. Linux系统常用工具集
  8. Tomcat历史版本下载
  9. MongoDB数据库基础教程(一) - 下载与安装
  10. Springboot实现阿里云通信短信服务有关短信验证码的发送
  11. RNN基本原理以及基于Pytorch实践
  12. 【05】制作第一个zblog模板第四期,完成首页logo、搜索、文章列表,友情链接等大部分首页自定义模块
  13. python打开默认浏览器_python 打开浏览器的方法 Python打开默认浏览器
  14. 26个音序的正确写法和占格_26个音序表怎么读(拼音音序表的正确写法)
  15. 如何实现输入银行卡号每隔四位自动添加一个空格的功能?
  16. PLA在计算机领域是什么意思,pla(pla是什么工作)
  17. Python+OpenCV实用案例应用教程:基于OpenCV的图像处理
  18. Hint: If you want to see a list of allocated tensors when OOM happens,
  19. 探索、松散结构,和大家谈谈关于社区的思考|shadow与mixlab的故事
  20. android 文本框 大文件,关于解决安卓手机超大文件夹(thumbnails)

热门文章

  1. 视觉slam学习笔记以及课后习题《第三讲李群李代数》
  2. (三) OpenCV仿射变换与透射变换(Affine and Perspective Transform)
  3. Hexo中next主题的个性化配置
  4. 局域网ip冲突检测工具_“网络工程师培训”基础教程五:局域网
  5. aws s3 獲取所有文件_Url从Amazon S3获取文件
  6. java输入一串字符串反转_反转Java中的字符串
  7. scala代码示例_Scala异常处理示例
  8. Android自动调整TextView的大小
  9. 如何在Windows即服务上安装Memcached Server
  10. jenkins部署war包到容器(tomcat)