Tensorflow 使用tf.nn.conv2d_转置重新创建tf.layers.conv2d_转置

Tensorflow 使用tf.nn.conv2d_转置重新创建tf.layers.conv2d_转置,tensorflow,deconvolution,tf-slim,Tensorflow,Deconvolution,Tf Slim,我一直在努力使用tf.nn.conv2d_转置来重新创建tf.layers.conv2d_转置的函数。事实上,使用这两个版本相同权重的输出是不同的,所以我犯了一些错误 定义conv2d_层的代码如下所示: slim.conv2d_transpose( input, 1, kernel_size=[3, 3], stride=2, padding="SAME", activation_fn=None, normalizer_fn=None ) 以及定义我的co

我一直在努力使用tf.nn.conv2d_转置来重新创建tf.layers.conv2d_转置的函数。事实上,使用这两个版本相同权重的输出是不同的,所以我犯了一些错误

定义conv2d_层的代码如下所示:

slim.conv2d_transpose(
    input, 1, kernel_size=[3, 3], stride=2, padding="SAME", activation_fn=None,
    normalizer_fn=None
)
以及定义我的conv2d_转置实现的代码(在指定权重并从上面有层的网络中偏移权重之后)

有什么建议吗

多谢各位

def prediction_layer(self, inputs, layer_name, strides, outputs):
    dyn_input_shape = tf.shape(inputs)

    batch_size = dyn_input_shape[0]
    out_h = dyn_input_shape[1] * strides
    out_w = dyn_input_shape[2] * strides

    out_shape = tf.stack([batch_size, out_h, out_w, outputs])

    pred = tf.nn.conv2d_transpose(inputs, self.weights[layer_name + "/weights"], strides=[1, strides, strides, 1], padding="SAME", output_shape=out_shape)
    pred = tf.nn.bias_add(pred, self.biases[layer_name + "/biases"])

    return pred

#definition of my conv2d_transpose
self.prediction_layer(inputs, layer_name="pose/part_pred/block4", strides=2, outputs=1)