不一致的维度来自tf.conv3d公司有膨胀和“有效”填充

2024-06-06 06:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

当使用张量流卷积与扩张和有效填充在一维和二维输出张量的大小小于没有扩张,如预期的。但是,对于三维卷积,情况并非如此,无论膨胀如何,都会输出相同的形状。”即使在请求“VALID”时,似乎也会使用REFLECT“padding”。你知道吗

使用Tensorflow 1.8.0。你知道吗

import tensorflow as tf
import numpy as np

data = tf.constant(np.ones((1, 12, 1)))
weights = tf.constant(np.ones((3, 1, 1)))
conv = tf.nn.convolution(data, weights, "VALID")
conv_dil = tf.nn.convolution(data, weights, "VALID", dilation_rate=[2])

data2D = tf.constant(np.ones((1, 12, 12, 1)))
weights2D = tf.constant(np.ones((3, 3, 1, 1)))

conv2D = tf.nn.conv2d(data2D, weights2D, [1, 1, 1, 1], "VALID")
conv_dil2D = tf.nn.conv2d(data2D, weights2D, [1, 1, 1, 1], "VALID", dilations=[1, 2, 2, 1])

data3D = np.ones((1, 12, 12, 12, 1))
data3D[0, 0, 2, 0, 0] = 2
data3D[0, 0, 1, 0, 0] = 2
data3D = tf.constant(data3D)
weights3D = tf.constant(np.ones((3, 3, 3, 1, 1)))


conv3D = tf.nn.conv3d(data3D, weights3D, [1, 1, 1, 1, 1], "VALID")
conv_dil3D = tf.nn.conv3d(data3D, weights3D, [1, 1, 1, 1, 1], "VALID", dilations=[1, 2, 2, 2, 1])


with tf.Session() as sess:
    conv_out, conv_dil_out, conv2D_out, conv_dil2D_out, conv3D_out, conv_dil3D_out = sess.run([conv, conv_dil, conv2D, conv_dil2D, conv3D, conv_dil3D])
    print("1D")
    print(conv_out.shape)
    print(conv_dil_out.shape)
    print("2D")
    print(conv2D_out.shape)
    print(conv_dil2D_out.shape)
    print("3D")
    print(conv3D_out.shape)
    print(conv_dil3D_out.shape)
    print("Values:")
    print(conv_dil3D_out[0, 0, 0, 0, 0])
    print(conv_dil3D_out[0, 0, 0, 2, 0])
    print(conv_dil3D_out[0, 0, 2, 0, 0])

结果:

1D
(1,10,1)
(1,8,1)
二维
(1,10,10,1)
(1,8,8,1)
三维
(1,10,10,10,1)
(1,10,10,10,1)
值:
29.0
27.0
28.0


Tags: tfnponesnnoutprintshapeconstant
1条回答
网友
1楼 · 发布于 2024-06-06 06:30:34

升级到1.10,问题就消失了。放大后的conv3d输出的大小现在是(1,8,8,8,1)如预期的那样。你知道吗

相关问题 更多 >