【3】Keras.applications包,一堆可以复用的深度学习模型库
Applications
包里有很多深度学习经典模型,且有预训练好的权重。
这些模型可以轻松用于:
- 预测
- 特征提取
- 微调
这些预训练权重会在实例化模型时自动下载,且放置在~/.keras/models
文件夹下。
对于图像识别任务,有下面这些模型可用:
- Xception
- VGG16
- VGG19
- ResNet50
- InceptionV3
- InceptionResNetV2
- MobileNet
- DenseNet
- NASNet
- MobileNetV2
Keras
相当于前端,后端会用Tensorflow
,PyTorch
等运行,配置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包,一堆可以复用的深度学习模型库相关推荐
- Keras快速上手:基于Python的深度学习
Keras快速上手:基于Python的深度学习 谢梁,鲁颖,劳虹岚 著 ISBN:9787121318726 包装:平装 开本:16开 正文语种:中文 出版社: 电子工业出版社 出版时间:2017-0 ...
- 深度学习系列笔记——贰 (基于Tensorflow2 Keras搭建的猫狗大战模型 三)
深度学习系列笔记--贰 (基于Tensorflow Keras搭建的猫狗大战模型 一) 深度学习系列笔记--贰 (基于Tensorflow Keras搭建的猫狗大战模型 二) 前面两篇博文已经介绍了如 ...
- Keras深度学习使用VGG16预训练神经网络实现猫狗分类
Keras深度学习使用VGG16预训练神经网络实现猫狗分类 最近刚刚接触深度学习不久,而Keras呢,是在众多的深度学习框架中,最适合上手的,而猫狗的图像分类呢,也算是计算机视觉中的一个经典案例,下面 ...
- Keras还是TensorFlow?深度学习框架选型实操分享
译者| 王天宇.林椿眄 责编| Jane.琥珀 出品| AI科技大本营 深度学习发展势头迅猛,但近两年涌现的诸多深度学习框架让初学者无所适从.如 Google 的 TensorFlow.亚马逊的 MX ...
- 在Ubuntu上安装Keras深度学习框架
目录 1)安装pip 2)安装Python科学套件 3)安装TensorFlow 4)安装keras 5)安装Jupyter Notebook 6)运行Keras 本文介绍如何在Ubuntu上安装Ke ...
- 深度学习框架Keras的安装
原文链接:https://blog.csdn.net/qingzhuochenfu/article/details/51187603 本人已经将最新博客更新转移至个人网站了,欢迎来访~~ SCP-17 ...
- GitChat · 人工智能 | 如何零基础用 Keras 快速搭建实用深度学习模型
GitChat 作者:谢梁 原文: 如何零基础用 Keras 快速搭建实用深度学习模型 关注微信公众号:GitChat 技术杂谈 ,一本正经的讲技术 [不要错过文末活动] 前言 在这篇小文章中,我们将 ...
- Part1:使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习——计算机图形学世界中相机的工作原理
Part1:使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习 1. 效果图 2. 原理 2.0 前向成像模型 2.1 世界坐标系 2.2 相机坐标系 2.3 坐标变换 2 ...
- 深度学习和Keras 简介
随着近年来人工智能(AI)技术的大热,相信读者们对"人工智能""机器学习" 和"深度学习"这几个词汇已经耳熟能详.那么,这三者之间是什么关系 ...
最新文章
- linux——grep 文本过滤器
- linux学习笔记(五):开机、关机、开机日志
- 基于Java的设计开题报告_基于Java的电子邮件的收发系统的设计与实现开题报告...
- Android深度探索(卷1)HAL与驱动开发 读书笔记(第四章)
- 二分图匹配----匈牙利算法之二
- AES方式加解密的简单介绍
- Linux系统常用工具集
- Tomcat历史版本下载
- MongoDB数据库基础教程(一) - 下载与安装
- Springboot实现阿里云通信短信服务有关短信验证码的发送
- RNN基本原理以及基于Pytorch实践
- 【05】制作第一个zblog模板第四期,完成首页logo、搜索、文章列表,友情链接等大部分首页自定义模块
- python打开默认浏览器_python 打开浏览器的方法 Python打开默认浏览器
- 26个音序的正确写法和占格_26个音序表怎么读(拼音音序表的正确写法)
- 如何实现输入银行卡号每隔四位自动添加一个空格的功能?
- PLA在计算机领域是什么意思,pla(pla是什么工作)
- Python+OpenCV实用案例应用教程:基于OpenCV的图像处理
- Hint: If you want to see a list of allocated tensors when OOM happens,
- 探索、松散结构,和大家谈谈关于社区的思考|shadow与mixlab的故事
- android 文本框 大文件,关于解决安卓手机超大文件夹(thumbnails)
热门文章
- 视觉slam学习笔记以及课后习题《第三讲李群李代数》
- (三) OpenCV仿射变换与透射变换(Affine and Perspective Transform)
- Hexo中next主题的个性化配置
- 局域网ip冲突检测工具_“网络工程师培训”基础教程五:局域网
- aws s3 獲取所有文件_Url从Amazon S3获取文件
- java输入一串字符串反转_反转Java中的字符串
- scala代码示例_Scala异常处理示例
- Android自动调整TextView的大小
- 如何在Windows即服务上安装Memcached Server
- jenkins部署war包到容器(tomcat)