gpt4 book ai didi

python - Theano 函数内的索引体操

转载 作者:行者123 更新时间:2023-11-30 23:20:57 25 4
gpt4 key购买 nike

我正在使用Theano沿着 Bengio et al 2003 实现神经 n-gram 语言模型。该模型使用单词的分布式表示,但我在编写允许我获取相对于单词表示向量的梯度的符号表达式时遇到了麻烦。

按照论文中的符号,我有一个大小为 V x m 的单词表示矩阵 C,其中 V 是词汇量大小, m 是词嵌入的维度。 C 的每一行都是一个单词的向量表示。

我的训练数据由从语料库中提取的 n 元语法组成。假设我让n = 3。然后我尝试估计P(wt|wt-1, wt-2)。神经网络通过使用 wt-1wt-2 的串联嵌入向量来估计此概率通过非线性函数预测wt。 (有关详细信息,请参阅论文。)每个单词都由词汇表中的索引表示,该索引也在 C 中索引其表示行。如果这些索引为 i1i2i3,我正在尝试编写一个 Theano 表达式。

f(i_3, C[i_1].C[i_2])

其中 f 包含隐藏层和非线性函数,C[i_1].C[i_2] 是数组 C 的串联[i_1]C[i_2]。我要做的第一件事是为 C[i_1].C[i_2] 编写符号 Theano 表达式。此外,此函数不仅需要采用单个训练实例,还需要采用多个训练实例的小批量。

如果我直接使用 numpy 矩阵而不是抽象 Theano 表达式,我知道如何做到这一点。例如,如果 C 是共享的,并且 XN x n - 1 个小批量的 N 个训练向量单词索引,我可以像这样查找连接的向量:

C.get_value()[X].reshape(X.shape[0], -1)

(我在 StackOverflow 上学到的一点索引体操 elsewhere。)

但是,当我尝试将此表达式编译为 Theano 函数时,我遇到了错误。

X_var = T.lmatrix('X_var')
function([X_var], C[X_var].reshape(X_var.shape[0], -1))

前面的内容给了我这个错误

Exception: ('The following error happened while compiling the node'
, Reshape{-1 (AdvancedSubtensor1.0, InplaceDimShuffle{x}.0),
'\n', "Compilation failed (return status=1):
/Users/williammcneill/.theano/compiledir_Darwin-13.3.0-x86_64-i386-64bit-i386-2.7.6-64/tmpOlUO0n/mod.cpp:300:31: error:
'new_dims' declared as an array with a negative size.
npy_intp new_dims[-1];.
^~. 1 error generated.. ", '[Reshape{-1}(<TensorType(float64, matrix)>, <TensorType(int64, (True,))>)]')

我认为这意味着 Theano 编译器不支持将 -1 作为最终 reshape 参数的索引技巧。

等效命令给出不同的错误。

function([X_var], C[X_var].reshape(X_var.shape[0], X_var.shape[1]*X_var.shape[2]))

ValueError: Expected ndim to be an integer, is <class 'theano.tensor.var.TensorVariable'>

我需要编写 f 的符号表达式,以便我可以获取其相对于 C 的梯度。谁能帮我做这个吗?

或者,有人可以向我指出使用单词嵌入的 Theano 代码示例吗?我找到的所有教程 Material 都是用于在图像数据上编写神经网络,但我还没有看到任何如何进行分布式表示的示例。

最佳答案

好吧,我是个白痴。有点。我在 reshape 参数周围缺少一对额外的括号。以下作品。

function([X_var], C[X_var].reshape((X_var.shape[0], -1)))

这很令人困惑,因为 arrayreshape 方法将采用两个参数(如我上面的参数)或一个元组(如我在答案中的参数),但 Theano 只会编译后者。

关于python - Theano 函数内的索引体操,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25166657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com