我的问题是,做同一件事的两个函数之间的计算时间差很大。
这些功能的目的是产生对递归的感谢 神经网络句子的结尾。
一些其他信息:
我的rnn是逐字母而不是逐字生成句子 字。
字母是一种热编码的
网络正在处理批处理,因此输入矢量的尺寸类似于:[batch_size,sequence_size,vocabulary_size]
sequence_size不是常量,因为我希望我的网络能够生成较短或较长的句子
所以有两个功能:
def gen_text(length, vocab_size):
generated = ['']*BATCH_SIZE
seed = []
input_ = []
# Seeds generation
for i in range(0, BATCH_SIZE):
seed.append(random.randint(1, vocab_size)-1)
input_.append([one_hot(seed[i], vocab_size)])
generated[i] += int_to_vocab[str(seed[i])]
# Text generation loop
for i in range(0, length):
model.reset_states()
output = model.predict([input_])
# Add the last outputed value for each batch in the input vector
for j in range(0, BATCH_SIZE):
encoded = [0.0] * vocab_size
last_output = output[j][i]
encoded[np.argmax(last_output)] = 1.0
generated[j] += int_to_vocab[str(flat_hot(encoded))]
input_[j].append(last_output)
return generated
第二个功能
def gen_text_seed(length, seed, vocab_size):
generated = ''
input_ = []
seed_seq = []
for i in range(0, len(seed)):
seed_seq.append(one_hot(vocab_to_int[seed[i]], vocab_size))
generated += seed[i]
# Stack the same sequence BATCH_SIZE times
for i in range(0, BATCH_SIZE):
input_.append(seed_seq)
# Text generation loop
for i in range(len(seed)-1, length):
model.reset_states()
output = model.predict([input_])
# Add the last outputed value for each batch in the input vector
for j in range(0, BATCH_SIZE):
encoded = [0.0] * vocab_size
last_output = output[j][i]
encoded[np.argmax(last_output)] = 1.0
input_[j].append(last_output)
# Add the generated char to the generated sentence
generated += int_to_vocab[str(flat_hot(encoded))]
return generated
其他一些信息可以使一切变得清晰:
我在第二个功能中所做的事情有点奇怪:我复制了相同的内容 在我的输入向量中增加batch_size的时间,因为我才刚开始 使用rnn和LSTM单元格,但我没有发现如何不使用批处理 用于预测,如果我使用批次进行训练...那么作为 第二个功能我只有1个句子(相同的batch_size次) 与第一个相比,我生成了64个不同的句子 但功能原理是相同的,问题在于 第二个函数比第一个函数长 序列大小
如果您能抽出宝贵的时间来帮助我解决这个问题,我将非常感激,因为我不太理解这个处理时间的差异。
我也知道这些功能根本没有优化,我只想了解为什么会有这种计算时差