簡體   English   中英

如何獲得VGG16的最后一個卷積塊(7,7,512)的扁平化(7* 7* 512 = 25088)值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM