这篇教程从VGG19的任意中间层中抽取特征写得很实用,希望能帮到您。
从VGG19的任意中间层中抽取特征
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')
model = Model(input=base_model.input, output=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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
利用新数据集finetune InceptionV3
from keras.applications.inception_v3 import InceptionV3
from keras.preprocessing import image
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
from keras import backend as K
base_model = InceptionV3(weights='imagenet', include_top=False)
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(200, activation='softmax')(x)
model = Model(input=base_model.input, output=predictions)
for layer in base_model.layers:
layer.trainable = False
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
model.fit_generator(...)
for i, layer in enumerate(base_model.layers):
print(i, layer.name)
for layer in model.layers[:172]:
layer.trainable = False
for layer in model.layers[172:]:
layer.trainable = True
from keras.optimizers import SGD
model.compile(optimizer=SGD(lr=0.0001, momentum=0.9), loss='categorical_crossentropy')
model.fit_generator(...)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
在定制的输入tensor上构建InceptionV3
from keras.applications.inception_v3 import InceptionV3
from keras.layers import Input
input_tensor = Input(shape=(224, 224, 3))
model = InceptionV3(input_tensor=input_tensor, weights='imagenet', include_top=True)
模型文档
## Xception模型 ```python keras.applications.xception.Xception(include_top=True, weights='imagenet', input_tensor=None,input_shape=None) ```
Xception V1 模型, 权重由ImageNet训练而言
在ImageNet上,该模型取得了验证集top1 0.790和top5 0.945的正确率
注意,该模型目前仅能以TensorFlow为后端使用,由于它依赖于"SeparableConvolution"层,目前该模型只支持tf的维度顺序(width, height, channels)
默认输入图片大小为299x299
参数
- include_top:是否保留顶层的3个全连接网络
- weights:None代表随机初始化,即不加载预训练权重。'imagenet’代表加载预训练权重
- input_tensor:可填入Keras tensor作为模型的图像输出tensor
- input_shape: 可选参数,仅当
include_top=False 时才应指定该参数。input_shape须为长3的tuple,图片的宽和高不得小于71.
返回值
Keras 模型对象
参考文献
License
预训练权重由我们自己训练而来,基于MIT license发布
## VGG16模型 ```python keras.applications.vgg16.VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None) ```
VGG16模型,权重由ImageNet训练而来
该模型再Theano和TensorFlow后端均可使用,并接受th和tf两种输入维度顺序
模型的默认输入尺寸时224x224
参数
- include_top:是否保留顶层的3个全连接网络
- weights:None代表随机初始化,即不加载预训练权重。'imagenet’代表加载预训练权重
- input_tensor:可填入Keras tensor作为模型的图像输出tensor
- input_shape: 可选参数,仅当
include_top=False 时才应指定该参数。input_shape须为长3的tuple,维度顺序依赖于image_dim_ordering ,图片的宽和高不得小于48.
返回值
Keras 模型对象
参考文献
License
预训练权重由牛津VGG组发布的预训练权重移植而来,基于Creative Commons Attribution License
## VGG19模型 ```python keras.applications.vgg19.VGG19(include_top=True, weights='imagenet', input_tensor=None, input_shape=None) ``` VGG19模型,权重由ImageNet训练而来
该模型再Theano和TensorFlow后端均可使用,并接受th和tf两种输入维度顺序
模型的默认输入尺寸时224x224
参数
- include_top:是否保留顶层的3个全连接网络
- weights:None代表随机初始化,即不加载预训练权重。'imagenet’代表加载预训练权重
- input_tensor:可填入Keras tensor作为模型的图像输出tensor
- input_shape: 可选参数,仅当
include_top=False 时才应指定该参数。input_shape须为长3的tuple,维度顺序依赖于image_dim_ordering ,图片的宽和高不得小于48.
返回值
Keras 模型对象
参考文献
License
预训练权重由牛津VGG组发布的预训练权重移植而来,基于Creative Commons Attribution License
## ResNet50模型 ```python keras.applications.resnet50.ResNet50(include_top=True, weights='imagenet', input_tensor=None, input_shape=None) ```
50层残差网络模型,权重训练自ImageNet
该模型再Theano和TensorFlow后端均可使用,并接受th和tf两种输入维度顺序
模型的默认输入尺寸时224x224
参数
- include_top:是否保留顶层的全连接网络
- weights:None代表随机初始化,即不加载预训练权重。'imagenet’代表加载预训练权重
- input_tensor:可填入Keras tensor作为模型的图像输出tensor
- input_shape: 可选参数,仅当
include_top=False 时才应指定该参数。input_shape须为长3的tuple,维度顺序依赖于image_dim_ordering ,图片的宽和高不得小于197.
返回值
Keras 模型对象
参考文献
License
预训练权重由Kaiming He发布的预训练权重移植而来,基于MIT License
## InceptionV3模型 ```python keras.applications.inception_v3.InceptionV3(include_top=True, weights='imagenet', input_tensor=None,input_shape=None) ``` InceptionV3网络,权重训练自ImageNet
该模型再Theano和TensorFlow后端均可使用,并接受th和tf两种输入维度顺序
模型的默认输入尺寸时299x299
参数
- include_top:是否保留顶层的全连接网络
- weights:None代表随机初始化,即不加载预训练权重。'imagenet’代表加载预训练权重
- input_tensor:可填入Keras tensor作为模型的图像输出tensor
- input_shape: 可选参数,仅当
include_top=False 时才应指定该参数。input_shape须为长3的tuple,其维度顺序依赖于所使用的image_dim_ordering ,图片的宽和高不得小于139.
返回值
Keras 模型对象
参考文献
License
预训练权重由我们自己训练而来,基于MIT License
## MusicTaggerCRNN模型 ```python keras.applications.music_tagger_crnn.MusicTaggerCRNN(weights='msd', input_tensor=None, include_top=True) ``` 该模型时一个卷积循环模型,以向量化的MelSpectrogram音乐数据为输入,能够输出音乐的风格. 你可以用`keras.applications.music_tagger_crnn.preprocess_input`来将一个音乐文件向量化为spectrogram.注意,使用该功能需要安装[Librosa](http://librosa.github.io/librosa/),请参考上面的使用范例. ### 参数 * include_top:是否保留顶层的全连接网络 * weights:None代表随机初始化,即不加载预训练权重。'imagenet'代表加载预训练权重 * input_tensor:可填入Keras tensor作为模型的图像输出tensor
返回值
Keras 模型对象
参考文献
License
预训练权重由我们自己训练而来,基于MIT License
引用
https://github.com/MoyanZitto/keras-cn/blob/master/docs/other/application.md~ Keras迁移学习提取特征 预训练特征提取及应用预训练的卷积神经网络特征提取及应用 |