Tensorflow - 预测序列:什么是X和Y?

时间:2017-03-13 14:44:02

标签: machine-learning tensorflow deep-learning

我有张量需要预测具有张量流LSTM / RNN的序列中的下一个元素,同时考虑前5个元素。我应该把什么喂给X和Y?

从1 2 3 4 5,我想预测6

假设我的输入序列X是:

X = 1 2 3 4 5 
    6 7 8 9 10 
    11 12 13 14 15
    ...

我的Y会是:

Y = 2 3 4 5 6 
    7 8 9 10 11 
    12 13 14 15 16
    ... ?

或者我应该喂它:

X = 1 2 3 4 5 
    2 3 4 5 6
    3 4 5 6 7 
    ....

我的Y会是:

Y = 6
    7 
    8 
    ... ?

或者TensorFlow会自动执行此操作吗?

我现在正在使用第一种方法,受到教程的启发,其中包括:

    x = tf.placeholder(tf.int32, [None, num_steps], name='input_placeholder')
    y = tf.placeholder(tf.int32, [None, num_steps], name='labels_placeholder')

    rnn_outputs = tf.reshape(rnn_outputs, [-1, state_size])
    y_reshaped = tf.reshape(y, [-1])
    logits = tf.matmul(rnn_outputs, W) + b
    predictions = tf.nn.softmax(logits)
    total_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y_reshaped))

如果我要求预测(在实际代码中,时间步长为16,班级数为14313,对不起):

        prevSlice = np.array([[1, 2 , 3 , 4, 5, 6 ,7, 8, 9 ,10, 11, 12, 13, 14, 15, 16]], dtype=np.string_)
        feed_dict={g['x']: prevSlice}
        preds, state = sess.run([g['preds'],g['final_state']], feed_dict)

我得到15个预测太多了。或者我该如何解释这些呢?我不需要对接下来的16个切片进行预测,仅针对下一个切片。

enter image description here

1 个答案:

答案 0 :(得分:2)

由于LSTM执行sequence to sequence预测,这并不意味着您将获得batch_size长度序列作为预测变量的输出而不是单个时间步长。

因此,简而言之,您将获得与预测相同大小的序列。

编辑:

def predict_point_by_point(model, data):
    #Predict each timestep given the last sequence of true data, in effect only predicting 1 step ahead each time
    predicted = model.predict(data)
    predicted = np.reshape(predicted, (predicted.size,))
    return predicted

您可以沿着这些行执行某些操作,并为每个len(timestep)添加一个移动窗口                                            你加入到你的模型会计中加上一个时间步,这样你就可以一次输出一个。