如何使用训练好的char-rnn来生成词?
How to use the trained char-rnn to generate words?
训练char-rnn时,网络的权重是固定的。如果我使用相同的第一个字符,我怎样才能得到不同的句子?比如"What is wrong?"和"What can I do for you?"这两个句子
具有相同的第一个单词 "W"。 char-rnn 可以生成两个不同的句子吗?
是的,你可以通过采样从相同的状态得到不同的结果。看看 Andrej Karpathy 的 min-char-rnn。示例代码在第 63 行:
def sample(h, seed_ix, n):
"""
sample a sequence of integers from the model
h is memory state, seed_ix is seed letter for first time step
"""
x = np.zeros((vocab_size, 1))
x[seed_ix] = 1
ixes = []
for t in xrange(n):
h = np.tanh(np.dot(Wxh, x) + np.dot(Whh, h) + bh)
y = np.dot(Why, h) + by
p = np.exp(y) / np.sum(np.exp(y))
ix = np.random.choice(range(vocab_size), p=p.ravel())
x = np.zeros((vocab_size, 1))
x[ix] = 1
ixes.append(ix)
return ixes
从相同的隐藏向量 h
和种子字符 seed_ix
开始,您将在下一个字符 - [=13] 上获得确定性 分布 =].但是结果是random,因为代码执行的是np.random.choice
而不是np.argmax
。如果分布在某个字符处达到峰值,大多数时候你仍然会得到相同的结果,但在大多数情况下,接下来的几个字符很可能会被采样,从而改变整个生成的序列。
请注意,这不是唯一可能的采样程序:基于温度的采样更受欢迎。例如,您可以查看 this post 了解概览。
训练char-rnn时,网络的权重是固定的。如果我使用相同的第一个字符,我怎样才能得到不同的句子?比如"What is wrong?"和"What can I do for you?"这两个句子 具有相同的第一个单词 "W"。 char-rnn 可以生成两个不同的句子吗?
是的,你可以通过采样从相同的状态得到不同的结果。看看 Andrej Karpathy 的 min-char-rnn。示例代码在第 63 行:
def sample(h, seed_ix, n):
"""
sample a sequence of integers from the model
h is memory state, seed_ix is seed letter for first time step
"""
x = np.zeros((vocab_size, 1))
x[seed_ix] = 1
ixes = []
for t in xrange(n):
h = np.tanh(np.dot(Wxh, x) + np.dot(Whh, h) + bh)
y = np.dot(Why, h) + by
p = np.exp(y) / np.sum(np.exp(y))
ix = np.random.choice(range(vocab_size), p=p.ravel())
x = np.zeros((vocab_size, 1))
x[ix] = 1
ixes.append(ix)
return ixes
从相同的隐藏向量 h
和种子字符 seed_ix
开始,您将在下一个字符 - [=13] 上获得确定性 分布 =].但是结果是random,因为代码执行的是np.random.choice
而不是np.argmax
。如果分布在某个字符处达到峰值,大多数时候你仍然会得到相同的结果,但在大多数情况下,接下来的几个字符很可能会被采样,从而改变整个生成的序列。
请注意,这不是唯一可能的采样程序:基于温度的采样更受欢迎。例如,您可以查看 this post 了解概览。