admin管理员组文章数量:1794759
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)
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预训练模型的使用 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686523896a77512.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论