#machine-learning #tensorflow #recurrent-neural-network #lstm
#машинное обучение #tensorflow #рекуррентная нейронная сеть #lstm
Вопрос:
Используя обучающий код Tensorflow seq2seq, я создаю чат-бота на основе символов. Я не использую встраивания word. У меня есть массив символов (алфавит и некоторые знаки препинания) и специальные символы, такие как GO, EOS и UNK символ.
Поскольку я не использую встраивания word, я использую стандартную tf.nn.seq2seq.basic_rnn_seq2seq()
модель seq2seq. Однако я не понимаю, какую форму encoder_inputs
и decoder_inputs
должны иметь. Должны ли они быть массивом целых чисел, соответствующим индексу символов в алфавитном массиве, или я должен сначала преобразовать эти целые числа в векторы с одним ключом?
Сколько входных узлов имеет одна ячейка LSTM? Можете ли вы указать это? Потому что я предполагаю, что в моем случае ячейка LSTM должна иметь входной нейрон для каждой буквы в алфавите (следовательно, векторы с одним нажатием?). Кроме того, какой «размер» LSTM вы должны передать в конструкторе tf.nn.rnn_cell.BasicLSTMCell(size)
?
Спасибо.
Приложение: это ошибки, которые я пытаюсь исправить.
Когда я использую следующий код, в соответствии с руководством:
for i in xrange(buckets[-1][0]): # Last bucket is the biggest one.
self.encoder_inputs.append(tf.placeholder(tf.int32, shape=[None], name="encoder{0}".format(i)))
for i in xrange(buckets[-1][1] 1):
self.decoder_inputs.append(tf.placeholder(tf.int32, shape=[None], name="decoder{0}".format(i)))
self.target_weights.append(tf.placeholder(dtype, shape=[None], name="weight{0}".format(i)))
И запускаю self_test()
функцию, я получаю сообщение об ошибке:
ValueError: Linear is expecting 2D arguments: [[None], [None, 32]]
Затем, когда я меняю формы в приведенном выше коде на shape=[None, 32]
, я получаю эту ошибку: TypeError: Expected int32, got -0.21650635094610965 of type 'float' instead.
Ответ №1:
Количество входных данных ячейки lstm — это размерность любого тензора, который вы передаете в качестве входных данных tf.rnn
функции при создании экземпляров объектов.
size
Аргументом является количество скрытых блоков в вашем lstm (таким образом, большее число выполняется медленнее, но может привести к созданию более точных моделей).
Мне понадобилась бы трассировка стека большего размера, чтобы понять эти ошибки.
Ответ №2:
Оказывается, size
аргумент, переданный в BasicLSTMCell
, представляет собой как размер скрытого состояния LSTM, так и размер входного слоя. Итак, если вам нужен скрытый размер, отличный от размера входных данных, вы можете сначала распространить свои входные данные через дополнительный слой проекции или использовать встроенную функцию встраивания слов seq2seq.