在deep learning tutorials中,所有训练数据都存储在shared
数组中,只有该数组的索引传递给训练函数以切出小批量。
我知道这允许将数据留在GPU内存中,而不是将小块数据作为参数传递给每个小批量的训练功能。
在一些previous questions中,这是为什么在教程中使用givens
机制的答案。
我还没有看到这两个概念之间的联系,所以我可能错过了必不可少的东西。 据我所知,givens机制用给定的符号表达式交换图中的变量(即,插入一些给定的子图代替该变量)。 那么为什么不首先按照我们需要的方式定义计算图?
这是一个最小的例子。我定义了一个共享变量X
和一个整数index
,我要么创建一个已包含切片操作的图形,要么我创建一个切片操作通过{{1}后插入切片操作的图形}。
从表面上看,两个结果函数givens
和get_nogivens
是相同的(参见最后的调试图)。
但是为什么教程会使用get_tutorial
模式?
givens
答案 0 :(得分:0)
他们此处仅使用givens
来分离从输入数据变量传递给图表的实际数据。您可以使用X[index * batch_size: (index + 1) * batch_size]
显式替换输入变量,但这只是更麻烦一点。