我正在尝试建立一个具有时间步长的简单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)