我想将一个函数映射到Theano中向量的每个元素,我可以不使用扫描而做到吗?

Dontloo

说一个函数,它计算数组每个索引处的出现次数:

import theano
import theano.tensor as T


A = T.vector("A")
idx_range = T.arange(A.shape[0])

result, updates = theano.scan(fn=lambda idx: T.sum(A[:idx+1]), sequences=idx_range)

count_ones = theano.function(inputs=[A], outputs=result)

print count_ones([0,0,1,0,0,1,1,1])
# gives [ 0.  0.  1.  1.  1.  2.  3.  4.]

至于说在这里,使用扫描效率不高。另外,theano.scan总是在我的机器上生成“ RuntimeWarning:numpy.ndarray的大小已更改,可能表明scan_perform.scan_perform import *与二进制不兼容”。

所以我想知道Theano中是否有更好的映射函数的方法?
提前致谢。

编辑:
我刚刚意识到这是一个可怕的例子,显然有一种更有效的方法可以像这样循环遍历向量:

result, updates = theano.scan(fn=lambda prior_result, a: prior_result + a,
                              outputs_info=T.alloc(np.int32(0), 1),
                              sequences=A,
                              n_steps=A.shape[0])

但是根据@Daniel Renshaw的回答,因为

一步中的计算取决于某个较早步骤中的相同计算

所以实际上我无法避免在这方面使用扫描,对吗?

编辑:
我想到了一种将其陶瓷化的方法:

A = T.vector()
in_size = 8
# a matrix with ones at and below the given diagonal and zeros elsewhere
mask = theano.shared(numpy.tri(in_size))  
result = T.dot(mask, A)
count_ones = theano.function(inputs=[A], outputs=result)
print count_ones(numpy.asarray([0,0,1,0,0,1,1,1]))

但是在这种情况下,我必须事先知道输入的大小(除非我可以像运行矩阵一样制作numpy.tri吗?)。
欢迎大家提出意见。:)

编辑:
我使用512D输入数组和10000次迭代对这三种方法进行了基准测试,并得到以下结果:

  1. 将求和函数映射到每个元素:CPU 16s GPU 140s
  2. 使用扫描在阵列上循环:CPU 13s GPU 32s
  3. 向量化:CPU 0.8s GPU 0.8s(实际上,我不认为theano已聘请GPU来执行此操作
丹尼尔·伦肖

在最一般的情况下,如果不对该功能做任何假设,则必须使用扫描。但是,可以对许多(也许是大多数?)有用功能进行矢量化处理,从而无需扫描。正如问题编辑中指出的那样,示例功能当然可以在不使用扫描的情况下应用于输入。

决定是否需要扫描将取决于需要应用的功能。案例肯定要求扫描是那些当在一个步骤的计算依赖于以下一些早期的步骤相同的计算。

PS关于二进制不兼容的警告可以安全地忽略。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以使用 Stream 将一个元素映射到多个元素吗?

来自分类Dev

我可以有一个仅映射到表中某些列的实体吗?

来自分类Dev

我可以使用AutoMapper将一个int映射到对象列表吗?

来自分类Dev

我可以使用 forEach 使数组的每个元素成为一个新对象吗?

来自分类Dev

我有一个数据文件。我想将该数据插入到弹性搜索 kibana 中。有什么自动化的方法可以做到这一点吗?

来自分类Dev

我可以不使用if语句中的break来做到这一点吗?

来自分类Dev

映射到向量列表的第一个元素

来自分类Dev

我可以使用另一个类内部的函数中的变量吗?

来自分类Dev

为向量的每个元素做我仅对R中的一个做

来自分类Dev

我可以在R中有一个向量吗

来自分类Dev

我有一个从rstudio生成的图,我想要图的导数图(一阶),我可以在r中做到这一点吗?

来自分类Dev

我可以定义一个Typescript映射,该映射具有与每个值的键对应的值约束吗?

来自分类Dev

在Aurelia中,我可以从包含的视图模型中绑定一个要由自定义元素调用的函数吗?

来自分类Dev

我可以编写一个引发异常的函数,该函数可以在android中的onCreate中使用吗?

来自分类Dev

我需要编辑MySQL吗?还是有一个WP插件可以做到?

来自分类Dev

我可以在一个常用函数中编写两个php函数吗

来自分类Dev

我可以创建另一个只有 2 个字段的实体来映射到同一个表吗

来自分类Dev

我可以创建一个函数,该函数是对象中函数的属性吗?

来自分类Dev

我可以映射一个在Struts 2中返回Object的操作方法吗?

来自分类Dev

我需要创建一个制作n维向量的python函数,以便每个元素都是[0,100]中的实数

来自分类Dev

在C ++中,我们可以为每个整数创建一个类吗?

来自分类Dev

我可以为枚举中的每个值添加一个JRadioButton吗?

来自分类Dev

我可以使用一个熊猫表作为另一个的映射表吗?

来自分类Dev

我可以在一个元素中包含2个JavaScript onClick事件吗?

来自分类Dev

我可以将结果映射到Dapper中的Tuple吗?

来自分类Dev

我想将查询返回的结果保存在变量中,并在另一个函数中使用它

来自分类Dev

我可以在同一个函数中访问python函数吗?

来自分类Dev

我可以将向量中的子向量项添加到同一向量中的另一个子向量吗?

来自分类Dev

我可以在Scala中使用“收益”来做到这一点吗?(嵌套循环产生组合向量)

Related 相关文章

  1. 1

    我可以使用 Stream 将一个元素映射到多个元素吗?

  2. 2

    我可以有一个仅映射到表中某些列的实体吗?

  3. 3

    我可以使用AutoMapper将一个int映射到对象列表吗?

  4. 4

    我可以使用 forEach 使数组的每个元素成为一个新对象吗?

  5. 5

    我有一个数据文件。我想将该数据插入到弹性搜索 kibana 中。有什么自动化的方法可以做到这一点吗?

  6. 6

    我可以不使用if语句中的break来做到这一点吗?

  7. 7

    映射到向量列表的第一个元素

  8. 8

    我可以使用另一个类内部的函数中的变量吗?

  9. 9

    为向量的每个元素做我仅对R中的一个做

  10. 10

    我可以在R中有一个向量吗

  11. 11

    我有一个从rstudio生成的图,我想要图的导数图(一阶),我可以在r中做到这一点吗?

  12. 12

    我可以定义一个Typescript映射,该映射具有与每个值的键对应的值约束吗?

  13. 13

    在Aurelia中,我可以从包含的视图模型中绑定一个要由自定义元素调用的函数吗?

  14. 14

    我可以编写一个引发异常的函数,该函数可以在android中的onCreate中使用吗?

  15. 15

    我需要编辑MySQL吗?还是有一个WP插件可以做到?

  16. 16

    我可以在一个常用函数中编写两个php函数吗

  17. 17

    我可以创建另一个只有 2 个字段的实体来映射到同一个表吗

  18. 18

    我可以创建一个函数,该函数是对象中函数的属性吗?

  19. 19

    我可以映射一个在Struts 2中返回Object的操作方法吗?

  20. 20

    我需要创建一个制作n维向量的python函数,以便每个元素都是[0,100]中的实数

  21. 21

    在C ++中,我们可以为每个整数创建一个类吗?

  22. 22

    我可以为枚举中的每个值添加一个JRadioButton吗?

  23. 23

    我可以使用一个熊猫表作为另一个的映射表吗?

  24. 24

    我可以在一个元素中包含2个JavaScript onClick事件吗?

  25. 25

    我可以将结果映射到Dapper中的Tuple吗?

  26. 26

    我想将查询返回的结果保存在变量中,并在另一个函数中使用它

  27. 27

    我可以在同一个函数中访问python函数吗?

  28. 28

    我可以将向量中的子向量项添加到同一向量中的另一个子向量吗?

  29. 29

    我可以在Scala中使用“收益”来做到这一点吗?(嵌套循环产生组合向量)

热门标签

归档