Tensorflow conv3d_transpose(上采样)完全连接层

时间:2016-09-15 14:57:06

标签: tensorflow convolution deconvolution

我想模仿this纸张使用完全连接的上采样层的位置。我使用的是conv3d_transpose,但概念应与2D版本相同。

我有一个来自卷积层[6,6,6,256]的输出被送入一个应该输出[13,13,13,128]的上采样层。由于图层应完全连接,因此过滤器应该[13,13,13,128]对吗? (减少特征地图大小)

此外,步幅应该1正确吗?

也许我正在考虑这个问题,让我解释一下。过滤器定义了倒置感受区域的大小(完全是向上) - 输出层上的权重矩阵位于的大小(因此是完整的{{1 }})。 EDIT INCORRECT [>步幅是单一窗口在输入图像上移动的步幅。] - > 我现在明白了步幅也与输出层有关。例如,具有步幅2的过滤器尺寸2将使输出尺寸加倍。 这意味着对于完全连接的层,步幅应为[13,13,13,128],但这是不可能的......

我的上采样代码在这里:

0

temp_batch_size = tf.shape(x)[0] #batch_size shape with tf.name_scope("deconv6") as scope: output_shape = [temp_batch_size, (n_input_z / 4), n_input_x / 4, n_input_y / 4, 128] strides = [1,1,1,1,1] conv7 = deconv3d(conv6, weights['wdc1'], biases['bdc1'], output_shape, strides, padding=1) conv7 = tf.reshape(conv7, [-1, n_input_x / 4, n_input_y / 4, (n_input_z / 4) * 128]) conv7 = tf.contrib.layers.batch_norm(conv7) conv7 = tf.reshape(conv7, [-1, (n_input_z / 4), n_input_x / 4, n_input_y / 4, 128]) 函数如下所示:

deconv

权重和偏见在这里:

def deconv3d(prev_layer, w, b, output_shape, strides, padding=0):
    # Deconv layer
    if padding == 0:
        deconv = tf.nn.conv3d_transpose(prev_layer, w, output_shape=output_shape, strides=strides, padding="SAME")
    else:
        deconv = tf.nn.conv3d_transpose(prev_layer, w, output_shape=output_shape, strides=strides, padding="VALID")
    deconv = tf.nn.bias_add(deconv, b)
    deconv = tf.nn.relu(deconv)
    return deconv

从调试开始,我可以验证输入和输出尺寸:

'wdc1' : tf.get_variable("weights_7", shape=[13, 13, 13, 128, 256],
           initializer=tf.contrib.layers.xavier_initializer(), dtype=tf.float32),
...

'bdc1': tf.Variable(tf.zeros([128], dtype=tf.float32), name="biases_7", dtype=tf.float32),

当我运行此代码时,出现以下错误:

(Pdb) conv6
<tf.Tensor 'conv5_1/Reshape_1:0' shape=(?, 6, 6, 6, 256) dtype=float32>
(Pdb) output_shape
[<tf.Tensor 'strided_slice:0' shape=() dtype=int32>, 13, 13, 13, 128]

我假设问题出现在第tensorflow.python.framework.errors.InvalidArgumentError: Conv3DBackpropInput: Number of planes of out_backprop doesn't match computed: actual = 6, computed = 1 [[Node: deconv6/conv3d_transpose = Conv3DBackpropInputV2[T=DT_FLOAT, padding="VALID", strides=[1, 1, 1, 1, 1], _device="/job:localhost/replica:0/task:0/gpu:0"](deconv6/conv3d_transpose/output_shape, weights_7/read, conv5_1/Reshape_1)]] [[Node: deconv8/BatchNorm/moments/sufficient_statistics/Shape/_39 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_3797_deconv8/BatchNorm/moments/sufficient_statistics/Shape", tensor_type=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"]()]] Node,但如果您认为代码实际位于deconv6,我会发布代码。

0 个答案:

没有答案