如何在Keras中将标签数据划分为时间序列?

时间:2019-05-24 19:49:51

标签: tensorflow keras lstm

我正在尝试建立一个具有时间步长的简单lstm模型,并使用一个小型数据集,该数据集包含36行和总共3种功能-年,月,日。

我用pandas和numpy将年份和月份重塑为3D阵列。在下面的代码中,您可以看到我将数据分为3个时间步和2个功能。

我的问题是由第三项功能-价格引起的。我担心,这是不正确的,我将最后一层的输出从1个神经元更改为3个神经元。

因此,如果我正确理解reshape()函数,就好像将整个数据分为3个单独的部分,这不是我的计划。我想知道如何在lstm模型中使时间步长正常工作。

以下是加载所有属性的函数:

def load_attributes(inputPath):
    cols = ["year", "month","price"]
    df = pd.read_csv(inputPath, sep=" ", header=None, names=cols)
    return df

加载年份和月份:

def get_attributes(train):

    continuous = ["year", "month"]

    cs = MinMaxScaler()
    scaled = cs.fit_transform(train[continuous])
    return scaled

型号:

def create_model():

    model = Sequential()
    model.add(LSTM(12, activation='relu', input_shape=(3, 2)))
    model.add(Dense(3))
    model.compile(optimizer='adam', loss='mse')

    return model

Numpy和Pandas操作:

trainAttrX = load_attributes("s.txt")

trainY = trainAttrX['price']

trainAttrX= get_attributes(trainAttrX)
trainY=np.array(trainY)

trainAttrX = np.reshape(trainAttrX,(12,3,2))
trainY = np.reshape(trainY,(12,3))

print(trainY)
print(trainAttrX)

培训过程:

model = create_model()

opt = Adam(lr=1e-3, decay=1e-3 / 200)
model.compile(loss="mean_absolute_percentage_error", optimizer=opt)

model.fit([trainAttrX], trainY, epochs=200, batch_size=12)

0 个答案:

没有答案