Генерация имен динозавров с помощью Tensorflow RNN - PullRequest
1 голос
/ 26 мая 2020

Я пытаюсь адаптировать «Генерация текста с помощью RNN» учебник для создания новых имен динозавров из списка существующих. Для обучения RNN текст учебника разделен на примерные последовательности символов равной длины:

# Read, then decode for py2 compat.
text = open(path_to_file, 'rb').read().decode(encoding='utf-8')
# The unique characters in the file
vocab = sorted(set(text))
idx2char = np.array(vocab)
# Creating a mapping from unique characters to indices
char2idx = {u:i for i, u in enumerate(vocab)}
# The maximum length sentence we want for a single input in characters
seq_length = 100
examples_per_epoch = len(text)//(seq_length+1)
# Create training examples / targets
char_dataset = tf.data.Dataset.from_tensor_slices(text_as_int)
# Convert to sequences of the same length
sequences = char_dataset.batch(seq_length+1, drop_remainder=True)
# Sequences as text
for item in sequences.take(2):
    print("----")
    print(repr(''.join(idx2char[item.numpy()])))

Вывод:

----
'First Citizen:\nBefore we proceed any further, hear me speak.\n\nAll:\nSpeak, speak.\n\nFirst Citizen:\nYou '
----
'are all resolved rather to die than to famish?\n\nAll:\nResolved. resolved.\n\nFirst Citizen:\nFirst, you k'

Моя проблема отличается от учебника тем, что у меня есть список имен разных длина вместо монолита текста:

aachenosaurus
aardonyx
abdallahsaurus
abelisaurus
abrictosaurus
abrosaurus
abydosaurus
acanthopholis

В моем случае последовательности символов - это имена. Пока я не могу тренировать RNN на последовательностях разной длины (пожалуйста, поправьте меня, если я ошибаюсь), мне нужно заполнить все мои имена пробелами до размера самого длинного имени, то есть 26.

Мое самое длинное имя - lisboasaurusliubangosaurus, поэтому, например, aardonyx должно быть дополнено как:

"lisboasaurusliubangosaurus"
"aardonyx                  "

Я попытался дополнить свои последовательности:

# Convert individual characters to sequences of the desired size.
sequences = char_dataset.padded_batch(seq_length+1, padded_shapes=seq_length, drop_remainder=True)

Который приводит к ошибке:

ValueError: The padded shape (26,) is not compatible with the corresponding input component shape ().

Вопросы:

  • Можно ли обучить Tensorflow RNN с последовательностями переменной длины?
  • Как дополнять короткие последовательности?

Спасибо!

...