Machine learning 确定批输入形状

Machine learning 确定批输入形状,machine-learning,keras,lstm,Machine Learning,Keras,Lstm,这是我代码的一部分: def lstm_model_structure(training_data,batch_size, num_neurons): train, test = training_data[:, :8], training_data[:, 8:14] train = train.reshape(train.shape[0], 1, train.shape[1]) model = Sequential() m

这是我代码的一部分:

 def lstm_model_structure(training_data,batch_size, num_neurons):    
      train, test = training_data[:, :8], training_data[:, 8:14]   
      train = train.reshape(train.shape[0], 1, train.shape[1])    
      model = Sequential()
      model.add(LSTM(units=num_neurons,activation="tanh", kernel_regularizer=l2(0.01), recurrent_regularizer=l2(0.01), bias_regularizer=l2(0.01), name='input',return_sequences=True, batch_input_shape=(batch_size, X.shape[1], X.shape[2])))
      model.add(Dropout(0.2))
      model.add(LSTM(units=50, name='lstm1',return_sequences=True))
      model.add(Dropout(0.2))
      model.add(LSTM(units=50, name='lstm2'))
      model.add(Dropout(0.2))
      model.add(Dense(6))
      # Compile the model
      adaDelta = optimizers.Adadelta(learning_rate=0.001, decay=1e-6)
      model.compile(loss='mean_squared_error', optimizer="adaDelta") 
      model.fit(trainX, trainy,validation_data=(testX, testy), epochs=350, batch_size=7, verbose=1, shuffle=False)

return model
其中训练数据的形状为(9,16),批量大小为9,神经元数为52。

前一个模型运行良好(没有验证数据)但是当我拆分数据以获得如下验证数据时

def lstm_model_structure(training_data,batch_size, num_neurons):        
     train, test = training_data[:, :8], training_data[:, 8:14]
     trainX, testX = train[:7, :], train[7:, :]
     trainy, testy = test[:7], test[7:]
     trainX = trainX.reshape(trainX.shape[0], 1, trainX.shape[1]) 
     testX = testX.reshape(testX.shape[0], 1, testX.shape[1])
     model = Sequential()
     model.add(LSTM(units=num_neurons, activation="tanh", kernel_regularizer=l2(0.01), recurrent_regularizer=l2(0.01), bias_regularizer=l2(0.01), name='input',return_sequences=True, batch_input_shape=(batch_size, trainX.shape[1], trainX.shape[2])))
     model.add(Dropout(0.2))
     model.add(LSTM(units=50, name='lstm1',return_sequences=True))
     model.add(Dropout(0.2))
     model.add(LSTM(units=50, name='lstm2'))
     model.add(Dropout(0.2))
     model.add(Dense(6))
     # Compile the model
     adaDelta = optimizers.Adadelta(learning_rate=0.001, decay=1e-6)
     model.compile(loss='mean_squared_error', optimizer="adaDelta")
     model.fit(trainX, trainy,validation_data=(testX, testy), epochs=350, batch_size=7, verbose=1, shuffle=False)
return model
其中:

     print(trainX.shape) >> (7, 1, 8)
     print(trainy.shape) >> (7, 6)
     print(testX.shape)  >> (2, 1, 8)
     print(testy.shape)  >> (2, 6)
我在拟合模型时出现以下错误(不兼容的形状):


如何确定正确的批输入形状?

这并不能告诉您使用什么,请尝试在此处打印所有这些trainX、trainy、testX、testy和share的形状。@faheem我添加了形状,请参考它们。谢谢,我认为问题是批次大小,不要在LSTM中指定批次输入形状,你只能指定输入形状。也不要将ADADDelta写为“ADADDelta”,因为它现在是变量,所以请删除倒逗号
model.compile(loss='mean\u squared\u error',optimizer=adaDelta)
这并不说明使用什么,请尝试在此处打印所有这些trainX、trainy、testX、testy和share的形状。@faheem我添加了形状,请参考它们。谢谢,我认为问题是批次大小,不要在LSTM中指定批次输入形状,你只能指定输入形状。也不要将ADADDelta写为“ADADDelta”,因为它现在是变量,所以请删除倒逗号
model.compile(loss='mean\u squared\u error',optimizer=adaDelta)
InvalidArgumentError: Incompatible shapes: [7] vs. [9]
     [[{{node training_2/Adadelta/gradients/loss_2/dense_3_loss/mean_squared_error/weighted_loss/mul_grad/Mul_1}}]]