2017-03-13 4 views
2

Ich habe einen Tensor, der das nächste Element in einer Sequenz mit einem Tensorflow LSTM/RNN vorhersagen muss, unter Berücksichtigung der vorherigen 5 Elemente. Was soll ich in X und Y einspeisen?Tensorflow - vorhersagende Sequenzen: Was ist X und Y?

Aus 1 2 3 4 5 mag ich vorhersagen 6

meine Eingangssequenz X Angenommen ist:

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

Würde meines Y sein:

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

Oder soll ich füttern es:

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

W ould my Y sein:

Y = 6 
    7 
    8 
    ... ? 

Oder macht TensorFlow das automatisch?

ich den ersten Ansatz bin jetzt von einem Tutorial inspiriert, mit:

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)) 

Wenn ich für eine Vorhersage fragen (in dem eigentlichen Code der Zeitschritte sind 16 und die Anzahl der Klassen ist 14313, sorry dafür):

 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) 

Ich bekomme 15 Vorhersagen zu viele. Oder wie soll ich das interpretieren? Ich brauche keine Vorhersagen für die nächsten 16 Scheiben, nur für die nächste 1.

enter image description here

Antwort

2

Da ein LSTM führt eine sequence to sequence Vorhersage, würde dies nicht bedeuten, dass Sie anstelle einer einzelnen Zeitschritt eine Folge von batch_size Länge wie die Ausgabe Ihres Prädiktor sind gegeben werden.

Kurz gesagt, Sie würden eine Sequenz von der gleichen Größe wie eine Vorhersage bekommen.

Edit:

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 

Sie etwas in diese Richtung tun könnte, und fügen Sie zu einer Zeit, als gut ein sich bewegendes Fenster für jede len(timestep) , die Sie auf Ihr Modell füttern für diesen einen Zeitschritt Buchhaltung hinzugefügt, damit Sie Ausgang ein .

+0

Danke! Es scheint, als ob das passiert ist. Ich frage mich nur, ob es effizienter ist, es Schritt für Schritt zu tun. Nehmen wir an, ich möchte die wahrscheinlichste Folge von 16 auswählen. Wähle ich einfach die wahrscheinlichste aus jedem der 16 Vektoren aus (das heißt: Sie berücksichtigen, dass wenn ich die wahrscheinlichste 1 auswähle, dass die wahrscheinlichste 2 mit dieser übereinstimmt) 1)? – dorien

+0

Ich denke, die sinnvollste Sache wäre, wähle die erste in der Vorhersage und prognostiziere weiter, indem ein bewegliches Fenster auf den LSTM gegeben wird. weil die Sequenz Ihnen nur eins als das erste Element der neuen Sequenz geben würde und ihre Wahrscheinlichkeiten, obwohl unterschiedlich, sich auf unterschiedliche Zeitschritte beziehen würden. – SerialDev

+1

Dem stimme ich zu, scheint das am sinnvollsten zu sein. Vielen dank für Deine Hilfe! – dorien

Verwandte Themen