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}}]]