【发布时间】:2021-02-12 15:39:55
【问题描述】:
我正在尝试将一些代码从 tensorflow 1.x 转换为 tensorflow 2.x。 到目前为止进展顺利,但我被困在空洞卷积上。与其他层不同,似乎没有一对一的转换。
到目前为止,我一直在将所有内容统一到 tf.keras。有一个纯 keras 实现 here 和一个 tf.nn.atrous_conv2d 实现 here 但我也不确定是否可以在 tf.keras.Model 功能 api 中使用它们。
代码如下:
with tf.variable_scope('aconv1d_' + name):
shape = [None, 30, 128]
kernel = tf.get_variable('kernel', (1, size, shape[-1], n_filters), dtype=tf.float32,
initializer=tf.contrib.layers.xavier_initializer())
if bias:
b = tf.get_variable('b', [shape[-1]], dtype=tf.float32, initializer=tf.constant_initializer(0))
out = tf.nn.atrous_conv2d(tf.expand_dims(input_tensor, dim=1), kernel, rate=rate, padding='SAME') + (
b if bias else 0)
out = tf.squeeze(out, [1])
return out
我只想转换它,将其粘贴到 keras 功能 api 中,执行 model.fit,然后运行。
感谢您帮助像我这样的菜鸟。
【问题讨论】:
-
您需要在
tf.nn.conv2d中使用dilations参数或在tf.keras.layers.Conv2D中使用dilation_rate。 -
感谢您的回答。我也一直在看这个,但是我该怎么做呢?我想要完全相同的结果,而输入不同的事实让我感到困惑。在 tf.nn.atrous_conv2d 中,它们将 4D 向量(内核)作为输入,而 tf.keras.layers.Conv2D 则不是这种情况。再次感谢您的宝贵时间。 @SusmitAgrawal
-
在这种情况下,请使用
tf.nn.conv2d。它使用您正在寻找的 4D 内核格式。 -
我可以在 keras 序列中使用它吗?我认为所有事情都必须在 Keras 中完成才能进行 model.fit。
-
只要你使用
tf.keras、TF2 和函数式 API / Model 子类化,应该没有任何问题。
标签: tensorflow machine-learning keras tensorflow2.0 tf.keras