如何在不使用输入的情况下定义输入形状?

How do you define input shape without using your input?

我正在训练以弄清楚如何在模型创建过程中不使用 X_train 来定义我的训练数据的输入形状。我知道 LSTM 网络只接受 3D 数组作为输入,我的数据是用这个 for 循环准备的

X_train = []
y_train = []
for i in range(10, 400):
    X_train.append(training_set_scaled[i-10:i, 0])
    y_train.append(training_set_scaled[i, 0])
X_train, y_train = np.array(X_train), np.array(y_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))

下面是我正在使用的模型。

model = Sequential()
model.add(LSTM(units = 100, return_sequences = True, input_shape = (X_train.shape[1], 1)))
model.add(Dropout(0.2))

model.add(LSTM(units=1000 , return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=1000 , return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=100))
model.add(Dropout(0.2))
model.add(Dense(units=1 ))
model.compile(optimizer=opt, loss='mean_squared_error' , metrics=[tf.keras.metrics.RootMeanSquaredError()])

如您所见,第一个 LSTM 层在输入形状中包含 X_train 是否有任何方法可以在不使用 X_train 的情况下定义输入形状,它知道它需要使用 X_train 进行训练,因为我们有 model.fitX_train 作为其参数之一

如果我执行以下操作,我的模型不会以相同的方式训练

model = Sequential()
model.add(LSTM(units = 100, return_sequences = True))
model.add(Dropout(0.2))

model.add(LSTM(units=1000 , return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=1000 , return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=100))
model.add(Dropout(0.2))
model.add(Dense(units=1 ))
model.compile(optimizer=opt, loss='mean_squared_error' , metrics=[tf.keras.metrics.RootMeanSquaredError()])

您是否尝试过使用 None 而不是 X_train?像这样?

model.add(LSTM(units = 100, return_sequences = True, input_shape = (None , 1)))