gpt4 book ai didi

theano - 在深度学习教程中真的有必要使用 'givens' 吗?

转载 作者:行者123 更新时间:2023-12-01 14:45:38 24 4
gpt4 key购买 nike

deep learning tutorials ,所有训练数据都存储在一个shared数组中,只有该数组的索引被传递给训练函数以切出一个小批量。我知道这允许将数据保留在 GPU 内存中,而不是将小块数据作为参数传递给每个小批量的训练函数。在一些previous questions ,这是关于为什么在教程中使用 givens 机制的答案。

我还没有看到这两个概念之间的联系,所以我可能错过了一些重要的东西。据我所知,givens 机制用给定的符号表达式交换图中的变量(即,插入一些给定的子图代替该变量)。那么为什么不首先按照我们需要的方式定义计算图呢?

这是一个最小的例子。我定义了一个共享变量 X 和一个整数 index,然后我要么创建一个已经包含切片操作的图形,要么创建一个切片操作插入后的图形通过 givens 临时设置。从表面上看,这两个结果函数 get_nogivensget_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/

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