【发布时间】:2016-07-15 13:51:17
【问题描述】:
假设我想在伪随机词(不是任何字典的一部分)上训练一个 RNN,所以我不能使用 word2vec。如何使用 tensorflow 表示单词中的每个字符?
【问题讨论】:
标签: string char tensorflow recurrent-neural-network
假设我想在伪随机词(不是任何字典的一部分)上训练一个 RNN,所以我不能使用 word2vec。如何使用 tensorflow 表示单词中的每个字符?
【问题讨论】:
标签: string char tensorflow recurrent-neural-network
如果你只是在做字符,你可以只使用一个大小为 128 的热向量,它可以代表每个 ascii 字符(你可能想使用更小的,因为我怀疑你会使用所有 ascii 字符,每个字母可能只有 26 个) .你真的不需要使用任何像词向量这样的东西,因为可能性的范围很小。
实际上,当您使用一种热门编码时,您就是一种学习每个字符的向量。假设您的第一个密集层(或 rnn 层)包含 100 个神经元。那么这将导致一个 128x100 矩阵与一个热编码相乘。由于除了一个值之外的所有值都不为零,因此您实际上是从矩阵中选择大小为 100 的单行,该矩阵是该字符的向量表示。本质上,第一个矩阵只是代表每个字符的向量列表,您的模型将学习这些向量表示。由于一种热编码的稀疏性,通常只查找行而不是执行完整的矩阵乘法会更快。这就是 tf.nn.embedding_lookup 或 tf.gather 函数的用途。
【讨论】: