Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何重塑以进行LSTM的三维输入?_Python_Tensorflow_Keras - Fatal编程技术网

Python 如何重塑以进行LSTM的三维输入?

Python 如何重塑以进行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

我观察了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.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等批量大小。您可能不想将每个观察结果都放入批处理中。空间(“空间点”)与时间(年)是一个更复杂的问题,这是否回答了您的问题?这回答了你的问题吗?