Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras函数api给出错误“1”;预期ndim=3,发现ndim=4“;_Python_Machine Learning_Keras_Neural Network_Lstm - Fatal编程技术网

Python Keras函数api给出错误“1”;预期ndim=3,发现ndim=4“;

Python Keras函数api给出错误“1”;预期ndim=3,发现ndim=4“;,python,machine-learning,keras,neural-network,lstm,Python,Machine Learning,Keras,Neural Network,Lstm,我正在尝试使用构建一个多输入多输出模型,并遵循他们的代码 但我犯了一个错误: 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 = Embeddin

我正在尝试使用构建一个多输入多输出模型,并遵循他们的代码 但我犯了一个错误:

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,但我在文章中读到了这一点(input_dim应该等于词汇表的大小+1)


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

嵌入的输入形状应该是一个带有形状的2D张量:(批量大小,序列长度)。在您的代码片段中,提供了主输入,它是一个3D张量。要修复它,请更改以下行:

main_input = Input(shape=(self.seq_len, 1), name='main_input')
<...>
auxiliary_input = Input(shape=(self.seq_len,1), name='aux_input')
main\u input=input(shape=(self.seq\u len,1),name='main\u input')
辅助输入=输入(shape=(self.seq\u len,1),name='aux\u input')
致:

main\u input=input(shape=(self.seq\u len,),name='main\u input')
辅助输入=输入(shape=(self.seq\u len,),name='aux\u input')
它应该以不同的维度来解决这个问题

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