Я пытаюсь адаптировать «Генерация текста с помощью 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 с последовательностями переменной длины?
- Как дополнять короткие последовательности?
Спасибо!