Tensorflow RNN: ввод двух разных типов

Я хочу ввести два типа данных в свои ячейки LSTM RNN. Мой ввод состоит из списка целых чисел (т.е. [5,2,3,4,6,1,0, ...] ).

Однако каждое целое число подразделяется на 2 разные группы, поэтому я хочу пометить каждое целое число, например, [[5,True],[2,False], [3,False], [4,True], ... ].

Я видел случаи, когда входные данные состоят из констант одного типа с размерностью входных данных 2 или выше. Но я не уверен, могут ли 2 разных типа сделать 1 единицу ввода, например [5,True]. Если это невозможно, я думаю о замене True на целое число 2 и False на целое число 1, например, [[5,2], [2,1], ...], где входное измерение равно 2 (не уверен, что это хороший способ отметить).

Что было бы хорошим способом отметить каждое целое число, чтобы каждое из них принадлежало к другой группе?


person heyzude    schedule 01.08.2017    source источник
comment
Нет, у вас не может быть тензора со смешанными типами данных. Вы можете либо, как вы предлагаете, использовать целочисленное значение для представления логического значения, либо иметь отдельный тензор с той же формой, но логическим типом данных.   -  person jdehesa    schedule 01.08.2017
comment
Каким образом я должен передать два отдельных тензора одинаковой формы, но с разными типами данных в мою ячейку LSTM?   -  person heyzude    schedule 02.08.2017
comment
Дело в том, что LSTM (или любая другая ячейка RNN, или слои нейронной сети в целом) не работают с логическими значениями или даже целыми числами, только с плавающей запятой. Я имею в виду, глядя на как на самом деле работают LSTM, вы можете увидеть операции не определены для логических значений (если вы не конвертируете их в 1.0 и 0.0). Как предлагает Bily, вы можете создать пользовательский тип ячейки, но сначала вам нужно решить, что делать с булевыми значениями. Если вы хотите использовать обычные LSTM, вам нужно использовать поплавки.   -  person jdehesa    schedule 02.08.2017
comment
Спасибо за ваши Коментарии. Теперь я знаю, что LSTM работает только с float. Я буду читать блог Колы.   -  person heyzude    schedule 03.08.2017


Ответы (1)


TensorFlow поддерживает вложенные кортежи в качестве входных данных rnn, см. doc. Однако вам нужно будет написать свой собственный класс ячеек для обработки этого конкретного типа ввода. В этом случае должно быть что-то вроде:

# 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)
person Bily    schedule 01.08.2017