私は事前にトレーニングされたVGGフェイスCNNを読み込んで正常に実行しました。私はレイヤー3と8からハイパーカラム平均を抽出したいと思います。ハイパーカラムを抽出するセクションは、hereです。しかし、get_output機能が働いていないので、私はいくつかの変更をしなければならなかった:Keras VGGの抽出機能
輸入:
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
私はこの問題を解決するにはどうすればよいですか?
注:ハイパー列抽出機能で
、私は1の代わりにfeature_maps = get_features(model,1,instance)
または任意の整数を使用する場合、それが正常に動作します。しかし、私はそれは私に多くのことを混同8