【问题标题】:which value is used for padding in tensorflow convolution?哪个值用于张量流卷积中的填充?
【发布时间】:2021-04-01 21:52:26
【问题描述】:

PyTorch 中,padding_mode 在使用卷积时有两种选择:zeroscircular

但是,我在 TensorFlow 的文档中找不到类似的参数。

此外,我发现 TensorFlow 没有使用 0 作为填充输入的值。

有人知道答案吗?

【问题讨论】:

标签: python tensorflow keras pytorch convolution


【解决方案1】:

确实使用零:

import tensorflow as tf

inputs = tf.ones((1, 10, 1))

想象步长为 2,过滤器为 3(仅由 1 组成)

<tf.Tensor: shape=(1, 10, 1), dtype=float32, numpy=
array([[[1.],  |
        [1.],  | 3  
        [1.],  |   |          
        [1.],      | 3      
        [1.],      |    |  
        [1.],           | 3  
        [1.],           |    | 
        [1.],                | 3           
        [1.],                |    |
        [1.]                      | 2
        # (will add a zero here)
]], dtype=float32)>

操作中的所有元素都将生成sum(1, 1, 1)。如果最后一个用零填充,结果将是sum(1, 1, 0),它是:

conv = tf.keras.layers.Conv1D(filters=1,
                              kernel_size=3,
                              strides=2,
                              padding='SAME',
                              kernel_initializer=tf.keras.initializers.Ones)

tf.squeeze(conv(inputs))
<tf.Tensor: shape=(5,), dtype=float32, numpy=array([3., 3., 3., 3., 2.], dtype=float32)>

您也可以使用tf.nn.conv1d 来查看/演示这一点:

import tensorflow as tf

inputs = tf.ones((1, 10, 1))

result = tf.nn.conv1d(input=inputs,
                      filters=tf.ones((3, 1, 1)),
                      stride=2,
                      padding='SAME')

tf.squeeze(result)
<tf.Tensor: shape=(5,), dtype=float32, numpy=array([3., 3., 3., 3., 2.], dtype=float32)>

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 2018-05-14
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多