【问题标题】:Keras functional api gives error "expected ndim=3, found ndim=4"Keras 功能 api 给出错误“预期 ndim=3,发现 ndim=4”
【发布时间】:2018-11-26 00:34:13
【问题描述】:

我正在尝试使用keras functional api 构建多输入多输出模型,并且我正在关注他们的代码 但我得到了那个错误:

ValueError:输入 0 与层 lstm_54 不兼容:预期 ndim=3,发现 ndim=4

我在创建 lstm_out 层时遇到了这个错误,代码如下:

def build_model(self):
    main_input = Input(shape=(self.seq_len, 1), name='main_input')
    #seq_len = 50, vocab_len = 1000
    x = Embedding(output_dim=512, input_dim=self.vocab_len()+1, input_length=self.seq_len)(main_input)

    # A LSTM will transform the vector sequence into a single vector,
    # containing information about the entire sequence
    lstm_out = LSTM(50)(x)
    self.auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)

    auxiliary_input = Input(shape=(self.seq_len,1), name='aux_input')
    x = concatenate([lstm_out, auxiliary_input])

    # We stack a deep densely-connected network on top
    x = Dense(64, activation='relu')(x)
    x = Dense(64, activation='relu')(x)
    x = Dense(64, activation='relu')(x)

    # And finally we add the main logistic regression layer
    main_output = Dense(1, activation='sigmoid', name='main_output')(x)

    self.model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])

    print(self.model.summary())
    self.model.compile(optimizer='rmsprop', loss='binary_crossentropy',
              loss_weights=[1., 0.2])

我认为问题在于嵌入层中的 input_dim,但我在keras Embedding documentation 中读到(input_dim 应该等于词汇量 + 1)。

我不知道为什么会这样,我的 input_dim 中的确切错误是什么,以及如何解决?

【问题讨论】:

    标签: python machine-learning keras neural-network lstm


    【解决方案1】:

    嵌入的输入形状应该是一个二维张量,形状为:(batch_size, sequence_length)。在您的代码中提供了 sn-p main_input,它是一个 3D 张量。要修复它,请更改以下行:

    main_input = Input(shape=(self.seq_len, 1), name='main_input')
    <...>
    auxiliary_input = Input(shape=(self.seq_len,1), name='aux_input')
    

    到:

    main_input = Input(shape=(self.seq_len, ), name='main_input')
    <...>
    auxiliary_input = Input(shape=(self.seq_len, ), name='aux_input')
    

    应该可以解决不同维度的问题

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 2019-06-22
      • 1970-01-01
      • 2021-04-05
      • 2022-01-20
      • 1970-01-01
      • 2019-03-13
      • 2019-04-14
      相关资源
      最近更新 更多