【问题标题】:TypeError: The added layer must be an instance of class Layer. Found: Tensor("concatenate_6/concat:0", shape=(None, 4608), dtype=float32)TypeError:添加的层必须是类Layer的实例。找到:张量(“concatenate_6/concat:0”,形状=(无,4608),dtype=float32)
【发布时间】:2020-03-24 21:10:10
【问题描述】:

我正在尝试实现一个 VQA 模型,在该模型中我将图像和语言模型相结合。我的模型定义是:

def VQA_MODEL():
    image_feature_size          = 4096
    word_feature_size           = 300
    number_of_LSTM              = 3
    number_of_hidden_units_LSTM = 512
    max_length_questions        = 30
    number_of_dense_layers      = 3
    number_of_hidden_units      = 1024
    activation_function         = 'tanh'
    dropout_pct                 = 0.5

    # Image model
    model_image = Sequential()
    model_image.add(Reshape((image_feature_size,), input_shape=(image_feature_size,)))

   # Language Model
   model_language = Sequential()
   model_language.add(LSTM(number_of_hidden_units_LSTM, return_sequences=True,input_shape=(max_length_questions, word_feature_size)))
   model_language.add(LSTM(number_of_hidden_units_LSTM, return_sequences=True))  
   model_language.add(LSTM(number_of_hidden_units_LSTM, return_sequences=False))


   # combined model
   model = Sequential()
   model.add(concatenate([model_language.output, model_image.output]))

   for _ in range(number_of_dense_layers):
       model.add(Dense(number_of_hidden_units, kernel_initializer='uniform', activation= activation_function))
       model.add(Dropout(dropout_pct))

   model.add(Dense(50, activation='softmax'))

   return model

model = VQA_MODEL()
model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
model.fit(train_X, train_Y, batch_size = batch_size, epochs=nb_epoch)

我似乎无法理解如何解决该错误。任何线索将不胜感激。

【问题讨论】:

    标签: python keras deep-learning


    【解决方案1】:

    错误是因为concatenate 小写字母c 不是layer,只有Concatenate 大写字母c 是一个层。但是,这也不适用于您的情况。

    由于您的组合模型不是 sequential 并且使用来自两个并行或不同模型的输入,因此最好使用 Functional API。以下代码应该可以工作:

    from tensorflow.keras import Sequential, Model
    from tensorflow.keras.layers import LSTM, Reshape, Dense, Dropout, concatenate, Concatenate
    def VQA_MODEL():
        image_feature_size          = 4096
        word_feature_size           = 300
        number_of_LSTM              = 3
        number_of_hidden_units_LSTM = 512
        max_length_questions        = 30
        number_of_dense_layers      = 3
        number_of_hidden_units      = 1024
        activation_function         = 'tanh'
        dropout_pct                 = 0.5
    
        # Image model
        model_image = Sequential()
        model_image.add(Reshape((image_feature_size,), input_shape=(image_feature_size,)))
    
       # Language Model
        model_language = Sequential()
        model_language.add(LSTM(number_of_hidden_units_LSTM, return_sequences=True,input_shape=(max_length_questions, word_feature_size)))
        model_language.add(LSTM(number_of_hidden_units_LSTM, return_sequences=True))  
        model_language.add(LSTM(number_of_hidden_units_LSTM, return_sequences=False))
    
    
        # combined model
        x = Concatenate()([model_language.output, model_image.output])
    
        for _ in range(number_of_dense_layers):
            x = Dense(number_of_hidden_units, kernel_initializer='uniform', activation= activation_function)(x)
            x = Dropout(dropout_pct)(x)
        x = Dense(50, activation='softmax')(x)
        model = Model(inputs = [model_language.input, model_image.input], outputs=x)
        return model
    
    model = VQA_MODEL()
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
    model.fit(train_X, train_Y, batch_size = batch_size, epochs=nb_epoch)
    

    【讨论】:

      猜你喜欢
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      相关资源
      最近更新 更多