gpt4 book ai didi

python - Keras VGG 提取特征

转载 作者:太空狗 更新时间:2023-10-29 21:58:07 26 4
gpt4 key购买 nike

我加载了预训练的 VGG 人脸 CNN 并成功运行。我想从第 3 层和第 8 层提取超列平均值。我正在关注关于从 here 中提取超列的部分。 .但是,由于 get_output 函数不起作用,我不得不进行一些更改:

导入:

import matplotlib.pyplot as plt
import theano
from scipy import misc
import scipy as sp
from PIL import Image
import PIL.ImageOps
from keras.models import Sequential
from keras.layers.core import Flatten, Dense, Dropout
from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D
from keras.optimizers import SGD
import numpy as np
from keras import backend as K

主要功能:

#after necessary processing of input to get im
layers_extract = [3, 8]
hc = extract_hypercolumn(model, layers_extract, im)
ave = np.average(hc.transpose(1, 2, 0), axis=2)
print(ave.shape)
plt.imshow(ave)
plt.show()

获取特征函数:(我跟着this)

def get_features(model, layer, X_batch):
get_features = K.function([model.layers[0].input, K.learning_phase()], [model.layers[layer].output,])
features = get_features([X_batch,0])
return features

超列提取:

def extract_hypercolumn(model, layer_indexes, instance):
layers = [K.function([model.layers[0].input],[model.layers[li].output])([instance])[0] for li in layer_indexes]
feature_maps = get_features(model,layers,instance)
hypercolumns = []
for convmap in feature_maps:
for fmap in convmap[0]:
upscaled = sp.misc.imresize(fmap, size=(224, 224),mode="F", interp='bilinear')
hypercolumns.append(upscaled)
return np.asarray(hypercolumns)

但是,当我运行代码时,出现以下错误:

get_features = K.function([model.layers[0].input, K.learning_phase()], [model.layers[layer].output,])
TypeError: list indices must be integers, not list

我该如何解决这个问题?

注意:

在超列提取函数中,当我使用 feature_maps = get_features(model,1,instance) 或任何整数代替 1 时,它工作正常。但我想从第 3 层到第 8 层提取平均值。

最佳答案

这让我很困惑:

  1. layers = [K.function([model.layers[0].input],[model.layers[li].output])([instance])[0] for li in layer_indexes], layers 是提取特征的列表。
  2. 然后将该列表发送到 feature_maps = get_features(model,layers,instance)
  3. def get_features(model, layer, X_batch):中,第二个参数,即layer,用于在model.layers[layer]中进行索引.output.

你想要的是:

  1. feature_maps = get_features(model,layer_indexes,instance):传递层索引而不是提取的特征。
  2. get_features = K.function([model.layers[0].input, K.learning_phase()], [model.layers[l].output for l in layer]):列表不能用于索引列表。

不过,您的特征抽象函数写得很糟糕。我建议你重写一切而不是混合代码。

关于python - Keras VGG 提取特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com