我一直在尝试对数据使用here中的想法。但是,我遇到了以下错误:
“ ValueError:检查输入时出错:预期lstm_16_input具有3维,但数组的形状为(8,4)”
我要运行的内容:
def main():
#X, Y = load_data()
X, Y = load_file()
print("------")
print(X)
print(X.shape)
print(type(X))
print("------")
print(Y)
print(Y.shape)
print(type(Y))
print("------")
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33)
model = build_model(150, 100)
# Error: ValueError: Error when checking input: expected lstm_16_input to have 3 dimensions, but got array with shape (8, 4)
model.fit(X_train, y_train, nb_epoch=200, batch_size=100, verbose=2)
我在哪里定义模型:
def build_model(first_layer_neurons, second_layer_neurons):
model = Sequential()
model.add(LSTM(first_layer_neurons, input_dim=NUMBER_OF_FEATURES, dropout_U=0.3))
model.add(Dense(second_layer_neurons))
model.add(Dropout(0.2))
# model.add(Flatten()) What I tried
model.add(Dense(NUMBER_OF_CLASSES, activation="softmax"))
model.compile(loss="categorical_crossentropy",
optimizer="adam",
metrics=["accuracy"])
return model
我的数据具有以下类型和形状:
如果需要,我正在使用:
NUMBER_OF_FEATURES = 5
NUMBER_OF_TIME_STEPS = 50
NUMBER_OF_CLASSES = 4
TEMP_DIR = "temp/"
SEED = 7
我试图在模型上添加flatten(),但这不起作用。
答案 0 :(得分:0)
LSTM采用(n_samples, n_timesteps, n_features)
形状的输入。您应该将数据重塑为这种格式。例如,如果原始输入数据的形状为(1000, 5)
,则可以将其分为10个样本,每个样本具有100个时间步长,从而获得形状为(10, 100, 5)
的输入。您也可以有重叠的样本。
也应该对输出进行相同的重塑。因此,如果原始输出形状为(1000, 1)
,则应将其重塑为(10, 100, 1)
。
请注意,n_timsteps是一个超参数,您应该使用对数据的了解或仅通过超参数调整来决定。