- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在deep learning tutorials ,所有训练数据都存储在一个shared
数组中,只有该数组的索引被传递给训练函数以切出一个小批量。我知道这允许将数据保留在 GPU 内存中,而不是将小块数据作为参数传递给每个小批量的训练函数。在一些previous questions ,这是关于为什么在教程中使用 givens
机制的答案。
我还没有看到这两个概念之间的联系,所以我可能错过了一些重要的东西。据我所知,givens 机制用给定的符号表达式交换图中的变量(即,插入一些给定的子图代替该变量)。那么为什么不首先按照我们需要的方式定义计算图呢?
这是一个最小的例子。我定义了一个共享变量 X
和一个整数 index
,然后我要么创建一个已经包含切片操作的图形,要么创建一个切片操作插入后的图形通过 givens
临时设置。从表面上看,这两个结果函数 get_nogivens
和 get_tutorial
是相同的(请参阅最后的 debugprints)。
但是为什么教程使用 givens
模式呢?
import numpy as np
import theano
import theano.tensor as T
X = theano.shared(np.arange(100),borrow=True,name='X')
index = T.scalar(dtype='int32',name='index')
X_slice = X[index:index+5]
get_tutorial = theano.function([index], X, givens={X: X[index:index+5]}, mode='DebugMode')
get_nogivens = theano.function([index], X_slice, mode='DebugMode')
> theano.printing.debugprint(get_tutorial)
DeepCopyOp [@A] '' 4
|Subtensor{int32:int32:} [@B] '' 3
|X [@C]
|ScalarFromTensor [@D] '' 0
| |index [@E]
|ScalarFromTensor [@F] '' 2
|Elemwise{add,no_inplace} [@G] '' 1
|TensorConstant{5} [@H]
|index [@E]
> theano.printing.debugprint(get_nogivens)
DeepCopyOp [@A] '' 4
|Subtensor{int32:int32:} [@B] '' 3
|X [@C]
|ScalarFromTensor [@D] '' 0
| |index [@E]
|ScalarFromTensor [@F] '' 2
|Elemwise{add,no_inplace} [@G] '' 1
|TensorConstant{5} [@H]
|index [@E]
最佳答案
他们在这里使用 givens
只是为了将传递给图形的实际数据与输入数据变量分离。您可以将输入变量显式替换为 X[index * batch_size: (index + 1) * batch_size]
但这有点困惑。
关于theano - 在深度学习教程中真的有必要使用 'givens' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33283233/
我正在使用 this solution在二进制矩阵中找到与图像边界对齐的矩形。假设现在我想找到一个不与图像边框对齐的矩形,并且我不知道它的方向;找到它的最快方法是什么? 为了示例,让我们寻找一个仅包含
else: 行在这个 Python 程序中是否正确/必要? from random import randrange for n in range(10): r = randrange(0,1
在 TDPL 7.1.5.1 中讨论了将 Widget w2 分配给 w1 并且作者指出“将 w2 逐个字段分配给 w1 会将 w2.array 分配给 w1.array——一个简单的数组边界分配,而
我是一名优秀的程序员,十分优秀!