Python 如何重塑以进行LSTM的三维输入?
我观察了10个特征1002次。我已经连接在一起对数据进行预处理,现在,我需要将其重塑为3D输入数据,以便在LSTM中使用。我不知道使用pd.df.groupbyPython 如何重塑以进行LSTM的三维输入?,python,tensorflow,keras,Python,Tensorflow,Keras,我观察了10个特征1002次。我已经连接在一起对数据进行预处理,现在,我需要将其重塑为3D输入数据,以便在LSTM中使用。我不知道使用pd.df.groupby(['timestep'])是否有意义,但我使用了一个很小的“np.reformate”函数,但似乎无法确定,因此我得到了错误。代码如下: train_dataset = dataset.sample(frac=0.8,random_state=0) test_dataset = dataset.drop(train_dataset.in
(['timestep'])
是否有意义,但我使用了一个很小的“np.reformate”
函数,但似乎无法确定,因此我得到了错误。代码如下:
train_dataset = dataset.sample(frac=0.8,random_state=0)
test_dataset = dataset.drop(train_dataset.index)
scaler = MinMaxScaler()
train_x = scaler.fit_transform(train_dataset)
test_x = scaler.fit_transform(test_dataset)
data_train = train_x.reshape(1002, 1001, 11)
def build_model():
model = tf.keras.Sequential([
layers.LSTM(128,activation=tf.nn.relu,input_shape=train_dataset.shape[1:],return_sequences=True, return_state=True),
layers.LSTM(128,activation=tf.nn.relu,return_sequences=True, return_state=True),
layers.Dense(1)
])
opt = tf.keras.optimizers.Adam(learning_rate=0.001)
model.compile(loss='mean_squared_error', optimizer=opt, metrics= ['mean_squared_error','mean_absolute_error'])
return model
Input 0 of layer lstm_10 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 11]
对于密集层
我面临的错误如下:
train_dataset = dataset.sample(frac=0.8,random_state=0)
test_dataset = dataset.drop(train_dataset.index)
scaler = MinMaxScaler()
train_x = scaler.fit_transform(train_dataset)
test_x = scaler.fit_transform(test_dataset)
data_train = train_x.reshape(1002, 1001, 11)
def build_model():
model = tf.keras.Sequential([
layers.LSTM(128,activation=tf.nn.relu,input_shape=train_dataset.shape[1:],return_sequences=True, return_state=True),
layers.LSTM(128,activation=tf.nn.relu,return_sequences=True, return_state=True),
layers.Dense(1)
])
opt = tf.keras.optimizers.Adam(learning_rate=0.001)
model.compile(loss='mean_squared_error', optimizer=opt, metrics= ['mean_squared_error','mean_absolute_error'])
return model
Input 0 of layer lstm_10 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 11]
从文档()中,我们看到输入需要具有(批处理、时间步、特性)的形状。不确定您的数据集是什么样子的,但听起来数据集中的每个观察值的形状都是(10,)。在这种情况下,您需要沿新维度时间组合观察结果。因此,整个数据集的形状应该类似(观察、时间步、特征)
我在这里没有指定训练标签,但请记住,traindata中的每个索引I都将对应于标签的索引I+statemem。statemem是用于进行下一个lstm预测的过去历史。您可以将其视为特定于您的问题的超参数。从文档()中,我们看到输入需要具有(批处理、时间步、功能)的形状。不确定您的数据集是什么样子的,但听起来数据集中的每个观察值的形状都是(10,)。在这种情况下,您需要沿新维度时间组合观察结果。因此,整个数据集的形状应该类似(观察、时间步、特征)
我在这里没有指定训练标签,但请记住,traindata中的每个索引I都将对应于标签的索引I+statemem。statemem是用于进行下一个lstm预测的过去历史。您可以将其视为特定于您的问题的超参数。还有一件事,我有1001年的数据,每年我在1002个空间点中观察到10个特征,现在,我的批量大小应该是1001或1002??批量大小与观察的数量无关-这是一个超参数,您可以设置它来帮助优化算法。通常,人们使用32、64或128等批量大小。您可能不想将每个观察结果都放入批处理中。空间(“空间点”)与时间(年)是一个更复杂的问题。还有一件事,我有1001年的数据,每年我在1002个空间点中观察到10个特征,现在,我的批量大小应该是1001或1002??批量大小与观察的数量无关-这是一个超参数,您可以设置它来帮助优化算法。通常,人们使用32、64或128等批量大小。您可能不想将每个观察结果都放入批处理中。空间(“空间点”)与时间(年)是一个更复杂的问题,这是否回答了您的问题?这回答了你的问题吗?