我怎样才能让我的 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.layers
和 child_model.layers
,您不会感到惊讶,它们在相同的内存地址共享相同的层。这意味着训练一个将设置另一个的层权重。
我正在做一个项目,我需要让我的 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.layers
和 child_model.layers
,您不会感到惊讶,它们在相同的内存地址共享相同的层。这意味着训练一个将设置另一个的层权重。