TypeError:“ Conv2dLayer”对象无法下标

时间:2019-01-29 15:57:36

标签: python-3.x tensorflow

我正在使用TensorFlow重构一个名为'Deep Voxel Flow':https://github.com/liuziwei7/voxel-flow的CNN模型。

模型的输出是一个张量,其形状为[16,256,256,3](16是批处理大小,256是要素图的大小,3是通道数)。当我尝试从4D张量提取前2个通道时('flow = deconv4 [:,:,:: 0:2]'),但出现错误:'TypeError:'Conv2dLayer'对象不可下标'。< / p>

deconv4 = Conv2d(deconv3_bn_relu, 3, [5, 5], act=tf.tanh, padding='SAME', 
W_init=w_init, name='deconv4')

flow = deconv4[:, :, :, 0:2] 

预期结果是“流”是一个4D张量,形状为[16,256,256,2]。

1 个答案:

答案 0 :(得分:0)

您应该将卷积层替换为Conv2D,该卷积层将返回张量:

deconv4 = tf.layers.conv2d(deconv3_bn_relu, 3, [5, 5], activation=tf.tanh, 
                           padding='SAME', kernel_initializer=w_init,
                           name='deconv4')

然后,您不能使用[]直接访问Tensorflow操作的结果。 但是您可以使用其他操作来重塑/修改/分割/截断张量等。

就您而言,我认为您正在寻找的可能是:

flow = tf.slice(deconv4, [0,0,0,0], [16, 256, 256, 2])