Theano.function中'givens'变量的用途

use*_*262 21 theano

我正在阅读http://deeplearning.net/tutorial/logreg.html上给出的逻辑函数的代码.我对函数的inputs&givens变量之间的区别感到困惑.计算模型在小批量上所犯错误的函数是:

 test_model = theano.function(inputs=[index],
        outputs=classifier.errors(y),
        givens={
            x: test_set_x[index * batch_size: (index + 1) * batch_size],
            y: test_set_y[index * batch_size: (index + 1) * batch_size]})

validate_model = theano.function(inputs=[index],
        outputs=classifier.errors(y),
        givens={
            x: valid_set_x[index * batch_size:(index + 1) * batch_size],
            y: valid_set_y[index * batch_size:(index + 1) * batch_size]})
Run Code Online (Sandbox Code Playgroud)

为什么不能/不会只创建x&y共享输入变量并在创建实际模型实例时定义它们?

nou*_*uiz 23

givens参数允许您分离模型的描述和输入变量的确切定义.这是给定参数的作用的结果:在编译之前修改图形以进行编译.换句话说,我们用图表替换带有关联值的给定键.

在深度学习教程中,我们使用普通的Theano变量来构建模型.我们givens用来加速GPU.在这里,如果我们将数据集保存在CPU上,我们将在每个函数调用时将一个小批量传输到GPU.当我们对数据集进行多次迭代时,我们最终会将数据集多次传输到GPU.由于数据集足够小以适应GPU,因此我们将其放入共享变量中,以便将其传输到GPU(如果有的话)(如果图形处理单元被禁用,则保留在中央处理单元上).然后在编译函数时,我们将输入与对应于要使用的小批量数据集的切片交换.然后,Theano函数的输入就是我们想要使用的迷你批次的索引.

  • 你离我更近了,但并不完全正确.您不需要使用givens存储在GPU上.CPU与GPU独立于给定.您描述的内容仅对共享变量有用.givens是一种修改图形的方法.原始图表不是基于共享变量构建的.如果原始图是在共享变量上构建的,则不需要给定.那么为什么要用usens?只是为了分离图形的构建,用于数据集处理. (2认同)