我正在尝试创建3D VAE生成对抗网络。我的第一层存在问题:

g1 = tf.nn.conv3d_transpose(z, filter = [4,4,4,512,200], strides= [1,1,1,1,1],
                              output_shape = (1,4,4,4,512), padding = "SAME")


其中z是(1200)张量,它是编码器的输出,运行良好。当我尝试运行会话以确保事物与Generator一起运行时,出现以下错误:

File "/home/michantia/anaconda2/envs/tf-gpu/lib/python2.7/site-packages/tensorflow/python/ops/nn_ops.py", line 1401, in conv3d_transpose
if not value.get_shape()[axis].is_compatible_with(filter.get_shape()[4]):

File "/home/michantia/anaconda2/envs/tf-gpu/lib/python2.7/site-packages/tensorflow/python/framework/tensor_shape.py", line 521, in __getitem__
return self._dims[key]

IndexError: list index out of range


目标是使用多个图层来生成32x32x32体素表示。

我不太确定自己在做什么错。任何反馈都非常感谢。

谢谢,

中号

最佳答案

为避免此错误,必须在使用输入,过滤器和输出之前将它们声明为占位符。

此外,要使用tf.nn.conv3d_transpose,必须在输入中使用5D张量。之后,您必须将z声明为5D占位符:

z = tf.placeholder(tf.float32, shape=(1,200,1,1,200))

filter = tf.placeholder(tf.float32, shape=(4,4,4,512,200))

out = tf.placeholder(tf.int32, shape=(5,))


请注意,输出必须是int32而不是float32

之后,您可以声明转置的卷积:

g1 = tf.nn.conv3d_transpose(z, filter, out, [1,1,1,1,1],padding = "SAME")

关于python - Tensorflow-conv3d.transpose-索引超出范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49242500/

10-12 19:27