2017-12-10 1 views
0

Ich versuche, LSTM in Python auszuführen. Kann jemand die Methode "tf.nn.embedding_lookup (embedding, input_data)" überschreiben? Ich verwende Float-Werte in meiner Eingabevariablen "input_data", aber die Verwendung dieser Methode erfordert Ganzzahlen. Welche Option muss ich mit Float-Daten in RNN eingeben?Wie führe ich RNN in Python mit realen Werten als Eingabedaten aus?

Ich verwende die "tf.nn.dynamic_rnn" -Methode, um das Netzwerk auszuführen. Ich habe auch die "legacy_seq2seq.rnn_decoder" Methode versucht, aber es hat auch nicht funktioniert. Danke.

embedding = tf.get_variable("embedding", [config.vocab_size, config.hidden_size]) 
inputs = tf.nn.embedding_lookup(embedding, input_data) 
outputs, last_state = tf.nn.dynamic_rnn(cell, inputs, initial_state=self.initial_state) 
#outputs, last_state = seq2seq.rnn_decoder(inputs, initial_state, cell, loop_function=loop, scope='rnnlm') 

Antwort

0

Ich bin nicht sicher, wo genau Ihr Code fehlschlägt, aber wenn es bei tf.nn.dynamic_rnn versagt hat, vielleicht brauchen Sie nur die dtype Parameter angeben:

tf.nn.dynamic_rnn(cell, inputs, initial_state=self.initial_state, dtype=tf.float32)

wie in der Dokumentation diskutiert : https://www.tensorflow.org/versions/r1.6/api_docs/python/tf/nn/dynamic_rnn

Wenn Ihre input_data Gleitkomma sind, würde ich Ihren Ansatz überdenken. Sind deine Daten kategorisch, wie Wörter in einer Sprache oder Namen von Menschen auf der Welt? Wenn ja, dann würde ich empfehlen, es in eine vorzeichenlose Ganzzahl wie uint32 umzuwandeln, die für die meisten Leute (a) intuitiver ist und (b) mit embedding_lookup kompatibel ist. Wenn nicht, dann möchten Sie wahrscheinlich keine Einbettung - Einbettungen sind (soweit ich weiß ..) nur für kategorische Daten. Wenn Sie nur die Dimensionalität Ihrer Daten reduzieren wollen, dann würde ich ein anderes Dimensionalitätsreduktionsschema wie PCA in Erwägung ziehen, oder vielleicht nur eine breite erste Schicht Ihres Netzes mit einer schmalen Ausgabe.

Verwandte Themen