我开始用Keras建立CNN模型。
我用下面的架构构建了一个CNN,其结果相当准确。

classifier = Sequential()


classifier.add(Convolution2D(32, (3,3), input_shape = (64, 64, 3), activation='relu'))


classifier.add(MaxPool2D(pool_size = (2,2)))

classifier.add(Convolution2D(32, (3,3), activation='relu'))
classifier.add(MaxPool2D(pool_size = (2,2)))

classifier.add(Convolution2D(32, (3,3), activation='relu'))
classifier.add(MaxPool2D(pool_size = (2,2)))

classifier.add(Convolution2D(32, (3,3), activation='relu'))
classifier.add(MaxPool2D(pool_size = (2,2)))

classifier.add(Flatten())

classifier.add(Dense(units=128, activation='relu'))
classifier.add(Dropout(rate = 0.25))
classifier.add(Dense(units=128, activation='relu'))
classifier.add(Dropout(rate = 0.25))


classifier.add(Dense(units=1, activation='sigmoid'))
classifier.compile(optimizer = 'sgd', loss = 'binary_crossentropy', metrics=['accuracy'])

我想做的是在模型中运行我的图像,但只运行卷积步骤。我对平坦化过程的输出感兴趣(即从卷积步骤获得特征)。
有人能帮我怎么把它放在凯拉斯吗?
提前谢谢

最佳答案

这里有一个解决方案。如果您对层'max_pooling2d_4'的输出感兴趣(您可以通过classifier.summary()获得层名称,但我建议您为每个层输入名称,例如classifier.add(MaxPool2D(pool_size=(2,2), name='pool1'))):

layer_dict = dict([(layer.name, layer) for layer in classifier.layers])

# input tensor
input_tensor = classifier.input

# output tensor of the given layer
layer_output = layer_dict['max_pooling2d_4'].output

# get the output with respect to the input
func = K.function([input_tensor], [layer_output])

# test image: [64, 64, 3]
image = np.ones((64,64,3))

# get activation for the test image
activation = func([image[np.newaxis, :, :, :]])

08-19 23:44