Python TensorFlow-tf.layers vs tf.contrib.layers

Python TensorFlow-tf.layers vs tf.contrib.layers,python,tensorflow,Python,Tensorflow,在TensorFlow中,并共享许多功能(标准2D卷积层、批量规范化层等)。这两者之间的区别是否仅仅在于contrib.layers包仍然是实验性的,而layers包被认为是稳定的?还是一个正在被另一个取代?其他差异?为什么这两个是分开的?您已经回答了自己的问题。名称空间的官方文档说明如下: 包含易失性或实验性代码的contrib模块 因此tf.contrib是为实验特性保留的。此名称空间中的API允许在不同版本之间快速更改,而其他API通常无法在没有新的主版本的情况下进行更改。特别是,tf.c

在TensorFlow中,并共享许多功能(标准2D卷积层、批量规范化层等)。这两者之间的区别是否仅仅在于
contrib.layers
包仍然是实验性的,而
layers
包被认为是稳定的?还是一个正在被另一个取代?其他差异?为什么这两个是分开的?

您已经回答了自己的问题。名称空间的官方文档说明如下:

包含易失性或实验性代码的contrib模块

因此
tf.contrib
是为实验特性保留的。此名称空间中的API允许在不同版本之间快速更改,而其他API通常无法在没有新的主版本的情况下进行更改。特别是,
tf.contrib.layers
中的函数与
tf.layers
中的函数不同,尽管其中一些函数可能使用不同的名称进行复制


至于你是否应该使用它们,这取决于你是否愿意处理突然发生的变化。不依赖于tf.contrib的代码可能更容易迁移到TensorFlow的未来版本。

是否有任何理由在这些模块之间复制许多功能?比如说,tf.contrib.layers中的版本是优化效果更好的实验版本还是其他版本?或者它们仅仅是由于历史原因在层模块添加到tf之前留下的?@erobert,这可能需要根据具体情况进行评估。通常,
tf.contrib
使社区能够试验不同的API,并在过程中公开不太稳定的特性。因此,它们不必在新要素着陆后立即消失。同样,它们也可能在一个小版本中被完全更改或清理。例如,目前,
tf.layers.conv2d
tf.contrib.layers.conv2d
具有不同的原型,并不总是可互换的。