conv1d data_format弃用警告

时间:2018-03-25 14:50:49

标签: tensorflow

我有一些TensorFlow代码,如下所示:

input_layer = tf.reshape(X, [-1, length, channels])

conv1_filters = 10
conv1_kernel_size = 5
conv1 = tf.layers.conv1d(
    inputs=input_layer,
    filters=conv1_filters,
    kernel_size=conv1_kernel_size,
    padding='same',
    activation=tf.nn.relu,
    )

它实际上可以正常工作,但是使用TF 1.6.0它现在会收到警告:

警告:tensorflow:来自C:\ Users \ w \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ tensorflow \ python \ util \ deprecation.py:497:调用conv1d(来自tensorflow.python)不推荐使用带有data_format = NHWC的.ops.nn_ops),并将在以后的版本中删除。 更新说明: 不推荐使用NHWC for data_format,而是使用NWC

好的,也许我应该更新我的代码。我尝试在conv1d调用中添加一个参数:

    data_format='NWC',

但是会出错:

ValueError:data_format参数必须是“channels_first”,“channels_last”之一。收到:NWC

好的,我尝试按照错误消息说:

    data_format='channels_last',

但是这会得到原始的弃用警告。

我还应该做些什么,或者我应该忽略警告?

1 个答案:

答案 0 :(得分:4)

我想知道同样的事情,你的问题促使我去研究这个问题。调用tf.layers.conv1d实际上会导致调用与卷积相关的类/方法的长流(ops使用ops使用ops ...)。

准确地说(如果不感兴趣的话,跳过这个):

  • layers.conv1d使用layers._Conv(所有转化层的基类)。
  • layers._Convnn_ops.Convolution称为_convolution_op
  • nn_ops.Convolution使用_WithSpaceToBatch作为conv_op
  • _WithSpaceToBatch获取_NonAtrousConvolution作为build_op
  • _NonAtrousConvoluton将(在1D案例中)使用conv1d作为其conv_op(准确地说,它使用调用self._conv1d的{​​{1}}。这是conv1d,当然与我们在开始时调用的tf.nn.conv1d非常不同。
  • 如上所述,tf.layers.conv1d会产生弃用警告。

我强烈怀疑在这个链条的某个地方,来自"用户友好" tf.nn.conv1d(由channels_first/last界面使用)tf.layers(由较低级别的操作使用)等更通用格式的NCHW/NHWC未正确更新为使用NCW/NWC对于1D卷积。

简短而无聊的回答:See this github issue。显然,这将 尚未在TF 1.7中修复。