我有一些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',
但是这会得到原始的弃用警告。
我还应该做些什么,或者我应该忽略警告?
答案 0 :(得分:4)
我想知道同样的事情,你的问题促使我去研究这个问题。调用tf.layers.conv1d
实际上会导致调用与卷积相关的类/方法的长流(ops使用ops使用ops ...)。
准确地说(如果不感兴趣的话,跳过这个):
layers.conv1d
使用layers._Conv
(所有转化层的基类)。layers._Conv
将nn_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中修复。