2017-03-13 4 views
2

나는 tensorflow LSTM/RNN이있는 시퀀스에서 다음 요소를 예측하면서 이전 5 개 요소를 고려해야하는 텐서가 있습니다. X와 Y로 무엇을 먹어야합니까?Tensorflow - 예측 순서 : X와 Y는 무엇입니까?

1 2 3 4 5에서, 나는 6

내 입력 시퀀스 X를 가정 해 예측하려는 것은 : 내가 먹이를

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

또는 수행해야합니다

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

내 Y가 있을까 그것 :

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

W 예 :

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) 

예측이 너무 많습니다. 아니면 어떻게 해석해야합니까? 다음 16 조각에 대한 예측은 필요 없습니다. 바로 다음에 1 조각에 대한 예측입니다. LSTM 이후

enter image description here

답변

2

이 당신이 당신의 예측의 출력 대신에 하나의 시간 단계로 batch_size 길이의 순서를 주어지고 있다는 것을 의미하지 것이다하는 sequence to sequence 예측을 수행한다.

그래서 짧게 예측과 동일한 크기의 시퀀스가 ​​생성됩니다.

편집 :

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) 에 대한 이동 창을 추가 할 수 있습니다 당신은 시간 aswell에서 출력 한 .

+0

고마워요! 그런 일이 일어나는 것 같습니다. 한 번에 한 단계 씩 수행하는 것이 더 효율적인지 궁금합니다. 또한, 가장 가능성이 높은 16 번째 시퀀스를 선택한다고 가정합니다. 16 개의 벡터 각각에서 가장 가능성이 높은 것을 선택합니까 (의미 : 가장 가능성있는 1을 선택하면 가장 가능성있는 2 번째가 해당됩니다). 첫째)? – dorien

+0

나는 가장 현명한 것이 예측에서 첫 번째를 고를 것이고 LSTM 위로 움직이는 창을 공급함으로써 더 예측할 것이라고 생각한다. 왜냐하면 다른 시퀀스가 ​​다른 타임 스텝을 참조하기는하지만 시퀀스는 새로운 시퀀스의 첫 번째 요소와 확률 만 제공하기 때문입니다. – SerialDev

+1

나는 이것이 가장 합리적인 것처럼 보인다는 것에 동의한다. 도와 주셔서 정말로 고맙습니다! – dorien

관련 문제