2017-08-01 2 views
0

Ich möchte meine LSTM RNN-Zellen mit 2 Typen eingeben. Meine Eingabe besteht aus einer Liste von ganzen Zahlen (d. H. [5,2,3,4,6,1,0, ...]).Tensorflow RNN: Eingabe von zwei verschiedenen Typen

Jede Ganzzahl ist jedoch in zwei verschiedene Gruppen kategorisiert. Daher möchte ich jede Ganzzahl wie [[5,True],[2,False], [3,False], [4,True], ... ] markieren.

Ich habe Fälle gesehen, bei denen die Eingabe aus demselben Typ von Konstanten besteht, mit einer Eingabegröße von 2 oder höher. Aber ich bin mir nicht sicher, ob 2 verschiedene Typen 1 Eingabeeinheit machen können, wie [5,True]. Wenn das nicht möglich ist, denke ich darüber nach True in Ganzzahl 2 und False in Ganzzahl 1 zu ersetzen, so wie [[5,2], [2,1], ...], wo Eingabe Dimension 2 ist (nicht sicher, das ist eine gute Möglichkeit zu markieren).

Was wäre eine gute Möglichkeit, jede ganze Zahl zu markieren, so dass jeder zu einer anderen Gruppe gehört?

+0

Nein, Sie können keinen Tensor mit gemischten Datentypen haben. Sie können entweder, wie Sie vorschlagen, einen ganzzahligen Wert verwenden, um den booleschen Wert darzustellen, oder einen separaten Tensor mit derselben Form, aber einem booleschen Datentyp verwenden. – jdehesa

+0

In welcher Weise sollte ich zwei separate Tensoren mit derselben Form, aber mit unterschiedlichen Datentypen in meine LSTM-Zelle einspeisen? –

+0

Die Sache ist, LSTM (oder jede andere RNN-Zelle oder neuronale Netzwerkschichten im Allgemeinen) funktionieren nicht mit booleschen Werten oder sogar ganzen Zahlen, nur mit float. Ich meine, wenn man sich anschaut, [wie LSTMs tatsächlich funktionieren] (http://colah.github.io/posts/2015-08-Understanding-LSTMs/), können Sie sehen, dass die Operationen nicht für Boolesche Werte definiert sind (es sei denn, Sie konvertieren sie in 1,0 und 0,0). [Wie Bily vorschlägt] (https://stackoverflow.com/a/45439871/1782792), können Sie einen benutzerdefinierten Zelltyp erstellen, aber Sie müssen zuerst entscheiden, was mit den booleschen Werten zu tun ist. Wenn Sie reguläre LSTMs verwenden möchten, müssen Sie Floats verwenden. – jdehesa

Antwort

0

TensorFlow unterstützt verschachtelte Tupel als rnn-Eingabe, siehe doc. Sie müssen jedoch eine eigene Zellenklasse für die Verarbeitung dieses speziellen Eingabetyps schreiben. In diesem Fall sollte es etwa so aussehen:

# Define your own cell which accept (integer, bool) input 
class YourCell(tf.contrib.rnn.RNNCell): 
    # override relevant functions of base interface: RNNCell 
    # state_size, output_size, etc. 

    # The main body of computation logic goes in this function 
    def __call__(self, inputs, state, scope=None): 
     # note inputs variable contains inputs of only one time step 
     # for example, inputs = (5, True) 
     interger, boolean = inputs 
     # your computation 

integer_input = [5, 2, 3, 4] 
bool_input = [True, False, False, True] 
inputs = [integer_input, bool_input] 
cell = YourCell() 
outputs = tf.nn.dynamic_rnn(inputs, cell)