gpt4 book ai didi

python - Theano:对稀疏矩阵的非零元素进行运算

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:04 25 4
gpt4 key购买 nike

我正在尝试获取 exp稀疏 theano 变量中的非零元素。我有当前的代码:

A = T.matrix("Some matrix with many zeros")
A_sparse = theano.sparse.csc_from_dense(A)

我正在尝试执行与以下 numpy 语法等效的操作:

mask = (A_sparse != 0)
A_sparse[mask] = np.exp(A_sparse[mask])

但 Theano 不支持 !=面具还没。 (并且 (A_sparse > 0) | (A_sparse < 0) 似乎也不起作用。)

我怎样才能实现这个目标?

最佳答案

Theano 对稀疏矩阵的支持并不完整,因此有些事情很难实现。在这种特殊情况下,您可以使用theano.sparse.structed_exp(A_sparse),但我尝试在下面更笼统地回答您的问题。

比较

在 Theano 中,人们通常会使用此处描述的比较运算符:http://deeplearning.net/software/theano/library/tensor/basic.html

例如,可以编写 T.neq(A, 0),而不是 A != 0。对于稀疏矩阵,必须使用 theano.sparse 中的比较运算符。两个运算符都必须是稀疏矩阵,并且结果也是稀疏矩阵:

mask = theano.sparse.neq(A_sparse, theano.sparse.sp_zeros_like(A_sparse))

修改子张量

为了修改矩阵的一部分,可以使用theano.tensor.set_subtensor。对于密集矩阵,这将起作用:

indices = mask.nonzero()
A = T.set_subtensor(A[indices], T.exp(A[indices]))

请注意,Theano 没有单独的 bool 类型(掩码是零和一),因此必须首先调用 nonzero() 来获取非零元素的索引。此外,这不适用于稀疏矩阵。

对非零稀疏元素进行操作

Theano 提供稀疏操作,据说这些操作是结构化的并且仅对非零元素进行操作。看: http://deeplearning.net/software/theano/tutorial/sparse.html#structured-operation

更准确地说,它们对稀疏矩阵的 data 属性进行操作,与元素的索引无关。此类操作实现起来很简单。请注意,结构化操作将对 data 数组中的所有值进行操作,也包括那些显式设置为零的值。

关于python - Theano:对稀疏矩阵的非零元素进行运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36043717/

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