いくつかの機能抽出の実験中に、「model.pop()」機能が期待どおりに機能していないことに気付きました。vgg16 のような事前トレーニング済みモデルの場合、「model.pop()」を使用した後、model.summary() はレイヤーが削除されたことを示します (4096 個の機能が予想されます)。ただし、新しいモデルに画像を渡すと、同じ結果になります。元のモデルとしての機能の数 (1000)。完全に空のモデルを含めていくつのレイヤーを削除しても、同じ出力が生成されます。何が問題なのかについてのガイダンスを探しています。
#Passing an image through the full vgg16 model
model = VGG16(weights = 'imagenet', include_top = True, input_shape = (224,224,3))
img = image.load_img( 'cat.jpg', target_size=(224,224) )
img = image.img_to_array( img )
img = np.expand_dims( img, axis=0 )
img = preprocess_input( img )
features = model.predict( img )
features = features.flatten()
print(len(features)) #Expected 1000 features corresponding to 1000 imagenet classes
1000
model.layers.pop()
img = image.load_img( 'cat.jpg', target_size=(224,224) )
img = image.img_to_array( img )
img = np.expand_dims( img, axis=0 )
img = preprocess_input( img )
features2 = model.predict( img )
features2 = features2.flatten()
print(len(features2)) #Expected 4096 features, but still getting 1000. Why?
#No matter how many layers are removed, the output is still 1000
1000
ありがとうございました!
ここで完全なコードを参照してください: https://github.com/keras-team/keras/files/1592641/bug-feature-extraction.pdf