我怎样才能让我的 CNN 输出一个特征向量

How can i make my CNN output a vector of features

我正在做一个项目,我需要让我的 CNN 输出像“Flatten”层的输出。 没有分类只是输入照片特征的向量,我有点迷路了......我知道关于 CNN 结构的每一件事,但我怎么能用 python 开始做这个?

你在使用 Keras 吗?如果你是,你可以看看这里的例子(https://keras.io/api/applications/#extract-features-with-vgg16)。

基本上,你会

features = model.predict(x)
np.save(outfile, features) # outfile is your desire output filename

您可以使用

加载文件
features = np.load(outfile)

另一种选择如下。

假设你有一个 tf Keras 模型(为了简单起见,这里我取了一个小的)。

>>> model.summary()

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
dense_1 (Dense)              (None, 128)               100480
_________________________________________________________________
dense_2 (Dense)              (None, 64)                8256
_________________________________________________________________
dense_3 (Dense)              (None, 32)                2080
_________________________________________________________________
dense_4 (Dense)              (None, 1)                 33
=================================================================
Total params: 110,849
Trainable params: 110,849
Non-trainable params: 0
_________________________________________________________________

假设您想要一个 $32$ 长的特征向量,对应于 dense_3.

现在您可以创建另一个对象

outputs = model.get_layer('dense_3').output
child_model = tf.keras.Model(inputs = model.inputs, outputs= outputs)

你的子模型会做你想做的事。您需要致电

features = child_model.predict(image)

重要说明: 如果您打印 model.layerschild_model.layers,您不会感到惊讶,它们在相同的内存地址共享相同的层。这意味着训练一个将设置另一个的层权重。