Keras功能性API给出错误“预期的ndim = 3,找到的ndim = 4”

卡马尔·赛义德(Kamal El-Saaid)

我正在尝试使用keras功能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])

我以为问题出在Embedding层的input_dim上,但是我在keras嵌入文档中读到(input_dim应该等于词汇量+ 1)。

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

迈克尔·格拉祖诺夫(Michael Glazunov)

嵌入的输入形状应为2D张量,形状为:(batch_size,sequence_length)。在您的代码段中提供了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')

它应该解决不同维度的问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

图层的输入不兼容(ndim = 4,找到的ndim = 3)

ValueError:输入0与层lstm_13不兼容:预期ndim = 3,找到的ndim = 4

预期ndim = 3,找到的ndim = 2

ValueError:输入0与层conv1d_1不兼容:预期ndim = 3,找到ndim = 4

mnist CNN ValueError预期min_ndim = 4,找到ndim = 3。收到的完整形状:[32、28、28]

Keras Conv2D-ValueError:层顺序的输入0与该层不兼容::预期的min_ndim = 4,找到的ndim = 3

ValueError:预期ndim = 3,替换BatchNormalization后找到ndim = 2

ValueError:输入0与层lstm_2不兼容:预期ndim = 3,找到的ndim = 4-多元时间序列数据

ValueError:sequence_9层的输入0与该层不兼容::预期的min_ndim = 4,找到的ndim = 3。收到完整形状:[无,无,无]

ValueError:sequence_6层的输入0与该层不兼容:预期ndim = 4,找到的ndim = 3。收到的完整形状:[32、28、28]

ValueError:连续图层_1的输入0与以下图层不兼容::预期的min_ndim = 4,找到的ndim = 3。收到完整的图形:[无,256、256]

ValueError:conv2d_10层的输入0与该层不兼容:预期ndim = 4,找到的ndim = 3。收到的完整图形:[无,100、100]

Keras ValueError:输入0与层conv2d_1不兼容:预期的ndim = 4,找到的ndim = 5

与vgg16 keras的形状不匹配:预期的ndim = 4,找到的ndim = 2,接收到的形状[无,无]

keras:ValueError:输入0与层卷积不兼容2d_11:预期的ndim = 4,找到的ndim = 2

Keras ValueError:输入0与层conv_lst_m2d_16不兼容:预期ndim = 5,找到ndim = 4

ValueError:输入0与lstm_1层不兼容:预期ndim = 3,找到的ndim = 2 [keras]

ValueError:conv3d_8层的输入0与该层不兼容::预期的min_ndim = 5,找到的ndim = 4。收到的完整形状:[无,4,150,150]

ValueError:输入0与层lstm_15不兼容:预期ndim = 3,找到ndim = 2

ValueError:输入0与图层layer_1不兼容:预期ndim = 3,找到的ndim = 2

输入0与图层flatten_5不兼容:预期的min_ndim = 3,找到的ndim = 2

lstm_5层的输入0与该层不兼容:预期ndim = 3,找到的ndim = 2

Keras:ValueError:图层sequence_1的输入0与该图层不兼容:预期的ndim = 3,找到的ndim = 2

带有keras的CNN:输入0与flatten_2层不兼容:预期的min_ndim = 3,找到的ndim = 2

max_pooling2d层的输入0与该层不兼容:预期ndim = 4,找到的ndim = 5。收到完整的图形:[无,4、10、8、32]

值错误:预期 min_ndim=3,发现 ndim=2

ValueError:输入0与层conv1d_1不兼容:预期ndim = 3,找到的ndim = 2

ValueError:层顺序的输入0与层不兼容::预期的min_ndim = 4,找到的ndim = 2。收到完整的形状:[无,2584]

顺序_43层的输入0与以下层不兼容::预期的min_ndim = 5,找到的ndim = 4。收到的完整图形:(无,32、32、100000)