簡體   English   中英

如何在Keras的轉移學習中使用input_shape和input_tensor?

[英]How do I use input_shape and input_tensor in Transfer Learning in Keras?

當我們在Keras2。中進行轉移學習時,參數需要“ input_shape”和“ input_tensor”。 但是我只使用input_tensor,從未使用過input_shape。 我認為僅input_tensor就足夠了,我不知道何時使用input_shape。 我應該如何單獨使用它們?

我同時使用input_tensor和input_shape並使用單獨的值,並且僅采用了input_tensor的值,而忽略了input_shape。

vgg16_model = VGG16(include_top=False, weights='imagenet', 
                    input_tensor = Input(shape=(150, 150, 3)), 
                    input_shape=(224,224,3))

top_model = Sequential()
top_model.add(Flatten(input_shape=vgg16_model.output_shape[1:]))
top_model.add(Dense(256, activation='relu'))
top_model.add(Dense(1, activation='sigmoid'))
model = Model(input=vgg16_model.input, output=top_model(vgg16_model.output))

model.summary()
Layer (type)                 Output Shape              Param #   
================================================================
input_6 (InputLayer)         (None, 150, 150, 3)       0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 150, 150, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 150, 150, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 75, 75, 64)        0         
_________________________________________________________________
block2_conv......

我希望這段代碼會出現錯誤,但是沒有錯誤,並且該模型可以接受(150,150,3)的形狀。 Input_shape =(224,224,3)被忽略。

你能給我一點幫助嗎? 謝謝。

VGG16代碼可能只是忘記了檢查兩個參數。

當然,兩者都沒有意義。

  • 當您希望模型以該大小自動創建自己的輸入層時,可以使用input_shape
  • 當您具有要作為輸入的張量時,可以使用input_tensor

您可以在input_tensor使用任何張量,這意味着可以將其他模型/圖層的輸出用作VGG16的輸入。 當然,您可以像以前那樣傳遞虛擬輸入張量,沒有理由讓代碼抱怨,它收到了張量,好的。

唯一的事情是,編碼人員忘記了驗證“如果兩個參數都存在,則拋出錯誤”。

實際上,當您設置input_tensor參數時,給定的張量(假設它是Keras張量)將用於輸入,因此input_shape參數將被忽略。 keras-applications源代碼中的相關部分:

if input_tensor is None:
    img_input = layers.Input(shape=input_shape)
else:
    if not backend.is_keras_tensor(input_tensor):
        img_input = layers.Input(tensor=input_tensor, shape=input_shape)
    else:
        img_input = input_tensor

如您所見,在最后一行中,給定的input_tensor將用於輸入張量,而無需考慮input_shape

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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