Я пытаюсь создать небольшой LSTM, который может научиться писать код (даже если это мусорный код), обучая его существующему коду Python. Я объединил несколько тысяч строк кода в один файл на несколько сотен файлов, каждый из которых оканчивается на <eos>
, обозначая «конец последовательности».
В качестве примера мой тренировочный файл выглядит так:
setup(name='Keras',
...
],
packages=find_packages())
<eos>
import pyux
...
with open('api.json', 'w') as f:
json.dump(sign, f)
<eos>
Я создаю токены из слов с:
file = open(self.textfile, 'r')
filecontents = file.read()
file.close()
filecontents = filecontents.replace("\n\n", "\n")
filecontents = filecontents.replace('\n', ' \n ')
filecontents = filecontents.replace(' ', ' \t ')
text_in_words = [w for w in filecontents.split(' ') if w != '']
self._words = set(text_in_words)
STEP = 1
self._codelines = []
self._next_words = []
for i in range(0, len(text_in_words) - self.seq_length, STEP):
self._codelines.append(text_in_words[i: i + self.seq_length])
self._next_words.append(text_in_words[i + self.seq_length])
Моя keras
модель:
model = Sequential()
model.add(Embedding(input_dim=len(self._words), output_dim=1024))
model.add(Bidirectional(
LSTM(128), input_shape=(self.seq_length, len(self._words))))
model.add(Dropout(rate=0.5))
model.add(Dense(len(self._words)))
model.add(Activation('softmax'))
model.compile(loss='sparse_categorical_crossentropy',
optimizer="adam", metrics=['accuracy'])
Но независимо от того, сколько я тренируюсь, модель никогда не генерирует <eos>
или даже \n
. Я думаю, это может быть из-за того, что мой размер LSTM равен 128
, а мой seq_length
равен 200, но это не имеет смысла? Я что-то упускаю?