如何在tensorflow 2 (tf.keras)中进行空洞卷积

Dav*_*ord 3 machine-learning keras tensorflow tf.keras tensorflow2.0

我正在尝试将一些代码从tensorflow 1.x 转换为tensorflow 2.x。到目前为止进展顺利,但我陷入了空洞卷积。与其他层不同,似乎没有一对一的转换。

到目前为止,我已经将所有内容统一到 tf.keras。这里有一个纯 keras 实现和一个 tf.nn.atrous_conv2d 实现,我也不确定是否可以在 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
Run Code Online (Sandbox Code Playgroud)

我只想转换它,将其粘贴到 keras 功能 api 中,执行 model.fit,然后运行。

谢谢你帮助我这样的菜鸟。

Tim*_*lin 5

Atrous Convolution 或 Dilated Convolution 已在tensorflow2.x版本中通过参数“ dilation_rate”提供。默认情况下,它设置为(1,1),如果您查看https://www.tensorflow.org/api_docs/python/tf/keras/layers/Conv2D。将其修改为其他值,例如(2,2),您将得到扩张/空洞卷积。

  • 你是说我可以使用:`tf.keras.layers.Conv2D(filters=4,kernel_size = (size, shape[-1]), dillation_rate=rate,initializer=tf.keras.initializers.GlorotUniform())`替换`tf.nn.atrous_conv2d(tf.expand_dims(input_tensor,dim = 1),kernel,rate=rate,padding ='SAME')`? (2认同)