[英]How to get the flattened ( 7* 7* 512 = 25088) values of the last convolution block (7,7,512) of VGG16
目前我正在使用 VGG-16 來提取圖像數據集的特征。 我在某種類型的數據集上對其進行了訓練,我想做的是將最后一個卷積塊權重作為扁平格式,以創建 25088-D 特征向量。 我的 model 總結如下:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
vgg16 (Functional) (None, 7, 7, 512) 14714688
_________________________________________________________________
flatten_3 (Flatten) (None, 25088) 0
_________________________________________________________________
dense_9 (Dense) (None, 4096) 102764544
_________________________________________________________________
dense_10 (Dense) (None, 4096) 16781312
_________________________________________________________________
dense_11 (Dense) (None, 10) 40970
=================================================================
Total params: 134,301,514
Trainable params: 134,301,514
到目前為止,我試圖做的是:
all_weights = []
for layer in model.layers:
print(layer.name)
w = layer.get_weights()
all_weights.append(w)
獲取所有層的權重,然后訪問第二層的最后一個塊(vgg16)我從len(all_weights[2])
得到的是 26 個列表,最后一個列表由 512 個值組成(很可能是偏差條款)。 有誰知道如何從這些列表中得到這個(7,7,512)權重?
提前致謝 !
你試過 model.layers[1].weights 嗎?
你想要的是
model.get_layer("vgg16").weights[-2]
正如您所注意到的, -1
指數會給您帶來偏差, -2
會給您帶來權重。
請注意,這不是形狀 (7, 7, 512) 的張量。 (7, 7, 512) 是 VGG16 塊的 output 形狀,權重矩陣形狀是 (KH, KW, Cin, 512) 其中 (KH, KW) 是 kernel 的高度和寬度,Cin 是輸入的數量渠道。 如果您使用 tf.keras.applications 中的標准tf.keras.applications
,則形狀將為 (3, 3, 512, 512)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.