所以我的任务是预测序列。我在时间t处有x,y,z值,它们是浮点型的。我必须预测在时间(t +1)处具有值x,y,z的序列。
TIME_STEP = 10
N_FEATURES = N_CLASSES = 3
LEARNING_RATE = 0.01
EPOCHS = 50
BATCH_SIZE = 10
x = tf.placeholder(tf.float32, shape = [None, N_FEATURES], name = 'name')
y = tf.placeholder(tf.float32, shape = [N_CLASSES], name = 'labels')
然后我有我的lstm模型,如下所示:
x = tf.transpose(x, [1, 0])
x = tf.reshape(x, [-1, num_features])
hidden = tf.nn.relu(tf.matmul(x, self.h_W) + self.h_biases)
hidden = tf.split(hidden, self.time_step)
lstm_layers = [tf.contrib.rnn.BasicLSTMCell(self.hidden_units, forget_bias=1.0) for _ in range(2)]
lstm_layers = tf.contrib.rnn.MultiRNNCell(lstm_layers)
outputs, _ = tf.contrib.rnn.static_rnn(lstm_layers, hidden, dtype = tf.float32)
lstm_output = outputs[-1]
最后我定义损失函数和优化器
loss = tf.reduce_mean(tf.square(y - y_pred))
opt = tf.train.AdamOptimizer(learning_rate = LEARNING_RATE).minimize(loss)
现在,我想使用先前的10个值来预测第11个。所以我像
一样运行会话for time in range(0, len(X)):
sess.run(opt, feed_dict = {x : X[time: time + TIME_STEP ],
y : Y[time + TIME_STEP + 1]})
但是当我检查此功能的损耗时,它具有巨大的价值,例如99400290.0,并且随着时间的推移而增加。这是我对序列预测的第一次经验,所以我认为我一定会错过一些巨大的东西
答案 0 :(得分:1)
是的,您应该对现实世界的输入数据进行归一化,并且它应该使用与训练集相同的缩放比例(相同的参数)。
原因是,现在您的模型已经过训练,可以接受一定形状和比例的输入,并且要使其按预期执行,您必须将测试输入按比例缩放。
(很抱歉将其作为答案发布,没有足够的代表评论)