“数值Python值”在手放在ML 2上中是否包括NumPy int、float和数组?我们是否需要从一个DataSet构造中显式地创建TF张量或TF NumPy作为TF函数的参数?
手放在ML 2上第12章自动图形和跟踪:
默认情况下,TF函数为每一组输入形状和数据类型生成一个新的图表,并将其缓存以供后续调用。..。然而,--这只适用于张量参数:如果将数值Python值传递给TF函数,将为每个不同的值生成一个新的图。..。 如果将数值Python值传递给TF函数,则将为每个不同的值生成一个新的图。如果使用不同的数值Python值多次调用TF函数,则会生成许多图形,从而减缓程序的速度,消耗大量RAM (必须删除TF函数才能释放它)。 Python值应该保留给几乎没有唯一值的参数,例如每层的神经元数量等超参数。这使得TensorFlow能够更好地优化yor模型的每个变体。
TensorFlow文档追踪规则中所述的第三条规则对应于Python、float、boolean、str等,这些规则将导致新的图形部分。但不确定第5条规则(所有其他Python类型)是否适用于NumPy结构。
函数通过从输入的args和kwargs计算缓存密钥来确定是否重用跟踪的ConcreteFunction。缓存键是一个键,它根据函数调用的输入args和kwargs,根据以下规则(可能会发生变化)来标识ConcreteFunction:
我认为函数存在的事实表明TF函数跟踪将生成一个新的图,但需要一个明确的确认。
发布于 2021-07-13 16:59:43
我认为改变numpy数组中的值不会生成一个新的图形。请考虑以下最起码的代码示例:
@tf.function
def test(input):
print("Tracing with input= ", input)
tf.print("Executing with input = ", input)第一个打印只在跟踪期间执行,第二个对每个调用执行。用列表调用它会导致:
test([1,2])
test([3,4])
>>> Tracing with input = [1, 2]
>>> Executing with input [1, 2]
>>> Tracing with input = [3, 4]
>>> Executing with input [3, 4]使用numpy-数组调用它会导致:
test(np.array([1,2]))
test(np.array([3,4]))
>>> Tracing with input = Tensor("input:0", shape=(2,), dtype=int32)
>>> Executing with input [1 2]
>>> Executing with input [3, 4]这里不对第二个调用执行跟踪。这至少表明numpy数组的处理方式与tensorflow张量相同。
https://stackoverflow.com/questions/67344068
复制相似问题