Sha*_*oon 14 python neural-network lstm keras tensorflow
我正在尝试构建一个小型LSTM,可以通过在现有的Python代码上进行训练来学习编写代码(即使是垃圾代码)。我将几千行代码连接在一个文件中,跨越数百个文件,每个文件都<eos>以“序列结束”结尾。
例如,我的训练文件如下所示:
setup(name='Keras',
...
],
packages=find_packages())
<eos>
import pyux
...
with open('api.json', 'w') as f:
json.dump(sign, f)
<eos>
Run Code Online (Sandbox Code Playgroud)
我正在使用以下单词创建令牌:
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])
Run Code Online (Sandbox Code Playgroud)
我的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'])
Run Code Online (Sandbox Code Playgroud)
但是,无论我训练了多少,该模型似乎都不会生成<eos>甚至生成\n。我想可能是因为我的LSTM大小是128和我的seq_length是200,但是,这并不十分有意义吗?有什么我想念的吗?
有时,当没有limit for code generation或the <EOS> or <SOS> tokens are not numerical tokensLSTM 永远不会收敛时。如果您可以发送输出或错误消息,那么调试会容易得多。
您可以创建一个额外的类来获取单词和句子。
# tokens for start of sentence(SOS) and end of sentence(EOS)
SOS_token = 0
EOS_token = 1
class Lang:
'''
class for word object, storing sentences, words and word counts.
'''
def __init__(self, name):
self.name = name
self.word2index = {}
self.word2count = {}
self.index2word = {0: "SOS", 1: "EOS"}
self.n_words = 2 # Count SOS and EOS
def addSentence(self, sentence):
for word in sentence.split(' '):
self.addWord(word)
def addWord(self, word):
if word not in self.word2index:
self.word2index[word] = self.n_words
self.word2count[word] = 1
self.index2word[self.n_words] = word
self.n_words += 1
else:
self.word2count[word] += 1
Run Code Online (Sandbox Code Playgroud)
然后,在生成文本时,只需添加一个<SOS>标记即可。您可以使用https://github.com/sherjilozair/char-rnn-tensorflow,一个字符级别的 rnn 供参考。
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |