tensorflow conv2d_transpose 梯度

代码调试器

我正在尝试使用 tensorflow 构建反卷积网络。

这是我的代码。

def decoder(self, activations):
    with tf.variable_scope("Decoder") as scope:

        h0 = conv2d(activations, 128, name = "d_h0_conv_1")
        h0 = lrelu(h0)
        shape = activations.get_shape().as_list()
        h0 = deconv2d(h0, [shape[0], 2 * shape[1], 2 * shape[2], 128], name = "d_h0_deconv_1") 
        h0 = lrelu(h0)

        h1 = conv2d(h0, 128, name = "d_h1_conv_1")
        h1 = lrelu(h1)
        h1 = conv2d(h1, 64, name = "d_h1_conv_2")
        h1 = lrelu(h1)
        shape = h1.get_shape().as_list()
        h1 = deconv2d(h1, [shape[0], 2 * shape[1], 2 * shape[2], 64], name = "d_h1_deconv_1") 
        h1 = lrelu(h1)

        h2 = conv2d(h1, 64, name = "d_h2_conv_1")
        h2 = lrelu(h2)
        h2 = conv2d(h2, 3, name = "d_h2_conv_2")

        output = h2
        print shape


    return output

参数激活基本上是从VGG19网络激活。

这是 deconv2d() 函数

def deconv2d(input_, output_shape,
         k_h=3, k_w=3, d_h=1, d_w=1, stddev=0.02,
         name="deconv2d", with_w=False):
with tf.variable_scope(name):
    # filter : [height, width, output_channels, in_channels]
    w = tf.get_variable('w', [k_h, k_w, output_shape[-1], input_.get_shape()[-1]],
                        initializer=tf.contrib.layers.variance_scaling_initializer())

    deconv = tf.nn.conv2d_transpose(input_, w, output_shape=output_shape,
                        strides=[1, d_h, d_w, 1], padding='SAME')


    biases = tf.get_variable('biases', [output_shape[-1]], initializer=tf.constant_initializer(0.0))
    deconv = tf.reshape(tf.nn.bias_add(deconv, biases), deconv.get_shape())

    return deconv

这是损失

with tf.name_scope("total_loss"):
        self.loss = tf.nn.l2_loss(self.output - self.images)

它不会产生输出形状兼容错误。但是,通过优化,

 with tf.variable_scope("Optimizer"):
        optimizer = tf.train.AdamOptimizer(config.learning_rate)
        grad_and_vars = optimizer.compute_gradients(self.loss, var_list = self.d_vars)
        self.d_optim = optimizer.apply_gradients(grad_and_vars)

张量流产生错误,

Traceback (most recent call last):
File "main.py", line 74, in <module>
tf.app.run()
File "/usr/local/lib/python2.7/dist-   packages/tensorflow/python/platform/app.py", line 44, in run
_sys.exit(main(_sys.argv[:1] + flags_passthrough))
File "main.py", line 59, in main
dcgan.train(FLAGS)
File "/home/junyonglee/workspace/bi_sim/sumGAN/model.py", line 121, in train
grad_and_vars = optimizer.compute_gradients(self.loss, var_list = self.d_vars)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/optimizer.py", line 354, in compute_gradients
colocate_gradients_with_ops=colocate_gradients_with_ops)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gradients_impl.py", line 500, in gradients
in_grad.set_shape(t_in.get_shape())
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 425, in set_shape
self._shape = self._shape.merge_with(shape)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_shape.py", line 585, in merge_with
(self, other))
ValueError: Shapes (30, 256, 256, 64) and (30, 128, 128, 64) are not compatible

解码器的输出大小为 (30, 256, 256 3),其中 30 是批量大小。

看起来就像在图层“ d_h1_deconv_1”上一样,全局梯度(流入op单元的梯度)的形状为(30,256,256,64),其中局部梯度(输入的梯度)的形状为(30,128, 128, 64),这是很明显的事实,它在做转置卷积。

有谁知道如何使用 conv2d_transpose() 正确反向传播?谢谢!

十多个

您能告诉我们您的deconv2d函数吗?没有它,我无法为您提供很多建议。

下面是我实现这种反卷积函数的两种方法:

def transpose_deconvolution_layer(input_tensor,used_weights,new_shape,stride,scope_name):
  with tf.variable_scope(scope_name):
    output = tf.nn.conv2d_transpose(input_tensor, used_weights, output_shape=new_shape,strides=[1,stride,stride,1], padding='SAME')
    output = tf.nn.relu(output)
    return output


def resize_deconvolution_layer(input_tensor,used_weights,new_shape,stride,scope_name):
    with tf.variable_scope(scope_name):
        output = tf.image.resize_images(input_tensor,(new_shape[1],new_shape[2]))#tf.nn.conv2d_transpose(input_tensor, used_weights, output_shape=new_shape,strides=[1,stride,stride,1], padding='SAME')
        output, unused_weights = conv_layer(output,3,new_shape[3]*2,new_shape[3],1,scope_name+"_awesome_deconv")
        return output

请测试这是否有效。如果您想了解更多关于我为什么编写两个程序的信息,请查看这篇文章:http : //www.pinchofintelligence.com/photorealistic-neural-network-gameboy/和这篇文章:http : //distill.pub/2016/deconv-棋盘/

如果这有帮助,请告诉我!

亲切的问候

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在TensorFlow中停止梯度优化器

来自分类Dev

如何在TensorFlow变量上获得损耗的梯度?

来自分类Dev

对conv2d_transpose感到困惑

来自分类Dev

Tensorflow中逻辑运算符的梯度

来自分类Dev

如何堆叠Tensorflow的conv2d_transpose()的多层

来自分类Dev

Tensorflow conv2d_transpose(deconv)out_backprop的行数与计算的不匹配

来自分类Dev

tensorflow梯度函数中grad参数的含义(python)

来自分类Dev

Tensorflow中的比例梯度运算

来自分类Dev

最大池梯度误差(Tensorflow 0.9rc0)

来自分类Dev

Tensorflow:没有为任何变量提供梯度

来自分类Dev

进行预测时,conv2d_transpose取决于batch_size

来自分类Dev

Tensorflow 2.0中的梯度计算

来自分类Dev

tensorflow 2个keras洗牌每行梯度问题

来自分类Dev

如何在Tensorflow 2.0中累积梯度?

来自分类Dev

如何理解张量流中的conv2d_transpose

来自分类Dev

使用tensorflow 2实现梯度损失

来自分类Dev

Tensorflow可以计算出积分逼近的梯度吗?

来自分类Dev

在Tensorflow 2中将梯度可视化为热图

来自分类Dev

在TensorFlow中批量访问单个梯度的最佳方法是什么?

来自分类Dev

Tensorflow梯度返回nan或Inf

来自分类Dev

如何在Tensorflow 2中实现小批量梯度下降?

来自分类Dev

在tensorflow.js中,如何计算模型输入的梯度?

来自分类Dev

Tensorflow梯度始终为零

来自分类Dev

Tensorflow无法评估梯度

来自分类Dev

我的TensorFlow梯度下降有差异

来自分类Dev

梯度下降优化器 TensorFlow

来自分类Dev

TENSORFLOW:在使用 pyfunc 和梯度覆盖创建 custum 梯度时如何使用 tf.stop_gradient(或如何阻止梯度流动)?

来自分类Dev

tensorflow-如何使用可变图像的大小进行 conv2d_transpose?

来自分类Dev

如何在 TensorFlow 中计算次梯度?

Related 相关文章

  1. 1

    在TensorFlow中停止梯度优化器

  2. 2

    如何在TensorFlow变量上获得损耗的梯度?

  3. 3

    对conv2d_transpose感到困惑

  4. 4

    Tensorflow中逻辑运算符的梯度

  5. 5

    如何堆叠Tensorflow的conv2d_transpose()的多层

  6. 6

    Tensorflow conv2d_transpose(deconv)out_backprop的行数与计算的不匹配

  7. 7

    tensorflow梯度函数中grad参数的含义(python)

  8. 8

    Tensorflow中的比例梯度运算

  9. 9

    最大池梯度误差(Tensorflow 0.9rc0)

  10. 10

    Tensorflow:没有为任何变量提供梯度

  11. 11

    进行预测时,conv2d_transpose取决于batch_size

  12. 12

    Tensorflow 2.0中的梯度计算

  13. 13

    tensorflow 2个keras洗牌每行梯度问题

  14. 14

    如何在Tensorflow 2.0中累积梯度?

  15. 15

    如何理解张量流中的conv2d_transpose

  16. 16

    使用tensorflow 2实现梯度损失

  17. 17

    Tensorflow可以计算出积分逼近的梯度吗?

  18. 18

    在Tensorflow 2中将梯度可视化为热图

  19. 19

    在TensorFlow中批量访问单个梯度的最佳方法是什么?

  20. 20

    Tensorflow梯度返回nan或Inf

  21. 21

    如何在Tensorflow 2中实现小批量梯度下降?

  22. 22

    在tensorflow.js中,如何计算模型输入的梯度?

  23. 23

    Tensorflow梯度始终为零

  24. 24

    Tensorflow无法评估梯度

  25. 25

    我的TensorFlow梯度下降有差异

  26. 26

    梯度下降优化器 TensorFlow

  27. 27

    TENSORFLOW:在使用 pyfunc 和梯度覆盖创建 custum 梯度时如何使用 tf.stop_gradient(或如何阻止梯度流动)?

  28. 28

    tensorflow-如何使用可变图像的大小进行 conv2d_transpose?

  29. 29

    如何在 TensorFlow 中计算次梯度?

热门标签

归档