keras中VGG19预训练模型的使用
keras提供了VGG19在ImageNet上的预训练权重模型文件,其他可用的模型还有VGG16、Xception、ResNet50、InceptionV3 4个。
VGG19在keras中的定义:
def VGG19(include_top=True, weights='imagenet',
input_tensor=None, input_shape=None,
pooling=None,
classes=1000)
include_top: 是否包含最后的3个全连接层
weights: 定义为‘imagenet’,表示加载在imagenet数据库上训练的预训练权重,定义为None则不加载权重,参数随机初始化
包含最后3个全连接层的VGG19模型下载地址: https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg19_weights_tf_dim_ordering_tf_kernels.h5
不包含最后3个全连接层的VGG19模型下载地址: https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg19_weights_tf_dim_ordering_tf_kernels_notop.h5
不包含全连接层的VGG19模型文件名称是" vgg19_weights_tf_dim_ordering_tf_kernels_notop.h5 " ,文件大小约80MB;
包含全连接层的VGG19模型文件名称是 " vgg19_weights_tf_dim_ordering_tf_kernels.h5 " ,文件大小约575MB
ubuntu中,下载的VGG19模型文件的本地路径是 ~/.keras/models/ , .keras是一个隐藏文件夹。可以预先下载模型文件放到对应目录下,程序执行时检测到存在模型文件就不会再下载了。
使用VGG19预训练模型分类图片的例子
# coding: utf-8
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 np
base_model = VGG19(weights='imagenet', include_top=True)
img_path = 'cat.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) # 预处理到0~1
out = base_model.predict(x) # 预测结果,1000维的向量
print(out.shape) # (1,1000)
程序首先加载带3个全连接层的VGG19模型,然后读入图片并做格式转换和归一化等处理后执行VGG模型预测,预测结果out是一个1000维的向量,代表了预测结果分别属于10000个分类的概率,形状是(1,1000),out内容如下:
使用VGG19预训练模型提取VGG19网络中任意层的输出特征的例子
上个例子可以看到keras对VGG网络的封装异常好,简单几行代码就可以分类图片。keras中VGG预训练参数模型另一个更常用的应用是可以提取VGG网络中任意一层的特征。
以下例子提取的是VGG19网络中第5个卷积层的输出特征(也是第1个全连接层的输入特征)
# coding: utf-8
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 np
base_model = VGG19(weights='imagenet', include_top=False)
model = Model(inputs=base_model.input, outputs=base_model.get_layer('block5_pool').output)
img_path = 'cat.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)
block5_pool_features = model.predict(x)
print(block5_pool_features.shape) #(1, 7, 7, 512)
base_model.get_layer('block5_pool')中的block5_pool参数定义了获取的是第5个卷积层的输出。第5层的输出是一个 1×7×7×512的向量,如下:
也可以设置为加载最后3个全连接层的VGG19网络,就可以获取最后3个全连接层的输出了:
# coding: utf-8
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 np
base_model = VGG19(weights='imagenet', include_top=True)
model = Model(inputs=base_model.input, outputs=base_model.get_layer('fc2').output)
img_path = 'cat.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)
fc2 = model.predict(x)
print(fc2.shape) #(1, 4096)
加了全连接层,所以base_model.get_layer('fc2') 里参数也可以是 flatten、fc1、fc2和predictions 。
VGG19各个模块在keras中定义的名称如下,可以根据名称轻松获取该层特征:
keras中VGG19预训练模型的使用的更多相关文章
- keras中使用预训练模型进行图片分类
keras中含有多个网络的预训练模型,可以很方便的拿来进行使用. 安装及使用主要参考官方教程:https://keras.io/zh/applications/ https://keras-cn. ...
- C#中的深度学习(五):在ML.NET中使用预训练模型进行硬币识别
在本系列的最后,我们将介绍另一种方法,即利用一个预先训练好的CNN来解决我们一直在研究的硬币识别问题. 在这里,我们看一下转移学习,调整预定义的CNN,并使用Model Builder训练我们的硬币识 ...
- Keras下载的数据集以及预训练模型保存在哪里
Keras下载的数据集在以下目录中: root\\.keras\datasets Keras下载的预训练模型在以下目录中: root\\.keras\models 在win10系统来说,用户主目录是: ...
- PyTorch-网络的创建,预训练模型的加载
本文是PyTorch使用过程中的的一些总结,有以下内容: 构建网络模型的方法 网络层的遍历 各层参数的遍历 模型的保存与加载 从预训练模型为网络参数赋值 主要涉及到以下函数的使用 add_module ...
- 自然语言处理(三) 预训练模型:XLNet 和他的先辈们
预训练模型 在CV中,预训练模型如ImagNet取得很大的成功,而在NLP中之前一直没有一个可以承担此角色的模型,目前,预训练模型如雨后春笋,是当今NLP领域最热的研究领域之一. 预训练模型属于迁移学 ...
- Paddle预训练模型应用工具PaddleHub
Paddle预训练模型应用工具PaddleHub 本文主要介绍如何使用飞桨预训练模型管理工具PaddleHub,快速体验模型以及实现迁移学习.建议使用GPU环境运行相关程序,可以在启动环境时,如下图所 ...
- 我的Keras使用总结(4)——Application中五款预训练模型学习及其应用
本节主要学习Keras的应用模块 Application提供的带有预训练权重的模型,这些模型可以用来进行预测,特征提取和 finetune,上一篇文章我们使用了VGG16进行特征提取和微调,下面尝试一 ...
- 【tf.keras】tf.keras加载AlexNet预训练模型
目录 从 PyTorch 中导出模型参数 第 0 步:配置环境 第 1 步:安装 MMdnn 第 2 步:得到 PyTorch 保存完整结构和参数的模型(pth 文件) 第 3 步:导出 PyTorc ...
- 预训练模型与Keras.applications.models权重资源地址
什么是预训练模型 简单来说,预训练模型(pre-trained model)是前人为了解决类似问题所创造出来的模型.你在解决问题的时候,不用从零开始训练一个新模型,可以从在类似问题中训练过的模型入手. ...
随机推荐
- Centosphp安装cassandra扩展
一.准备 当前php版本PHP Version 5.5.10,首先去http://pecl.php.net/package/cassandra,找到对应的php版本 二.下载安装 # wget htt ...
- Docker Kubernetes 健康检查
Docker Kubernetes 健康检查 提供Probe探测机制,有以下两种类型: livenessProbe:如果检查失败,将杀死容器,然后根据Pod的重启策略来决定是否重启. readines ...
- 剑指offer(51)构建乘积数组
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...
- win7下MKVToolNix进行mkv字幕封装
MKVToolNix下载地址(https://www.fosshub.com/MKVToolNix.html) 下载安装后打开,当时没创建桌面图标,GUI地址(C:\ProgramData\Micro ...
- 爆料:2019手游折扣app是真福利还是骗人哪个靠谱?
直接上干货.也许你在找寻,安全的手游折扣App,稳定的手游折扣App,不断续充的折扣App,续充不涨价的折扣App,网上的内容太多,难以分辨.那么看这个可以直接给你答案 1.历史(2004年成立,15 ...
- maven开发项目中遇到的问题
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com ...
- docker入门篇 部署springboot项目
安装docker Ubuntu16.04安装Docker 使用docker 注册docker服务 systemctl enable docker systemctl status docker 然后在 ...
- mvc 之 学习地址
https://blog.csdn.net/mss359681091/article/details/52135861
- NodeJS:(一)特性&环境&测试
特性: ①非阻塞I/O,事件驱动,单线程 非阻塞I/O:进程不等I/O完成(阻塞是等I/O完成后才进行下一步) 事件驱动:异步操作结束后通知 ②优点 前端职责范围变大,统一开发体验 处理高并发(单位时 ...
- linux下postgres未能正常启动的解决过程
转载:http://www.cnblogs.com/starRebel/p/7892214.html 起因是一次linux服务器重启后,postgres没有起来,手动找原因. 1. 直接在命令行打po ...