【问题标题】:Unsure whether function breaks backpropagation不确定函数是否会破坏反向传播
【发布时间】:2018-05-13 16:55:32
【问题描述】:

在过去的几天里,我对 tensorflow 进行了很多修改,但是我很不确定我编写的函数是否会破坏神经网络中的反向传播。在尝试将此功能集成到NN中之前,我想我会在这里问。所以基本设置是我想用

添加两个矩阵
op = tf.add(tfObject, tfImageBackground)

tfImageBackground 是一些固定的图像。 (即大小为 800、800 且 R = G = B = A = 0 的 RGBA 图像)和 tfObject 再次是具有相同维度的矩阵,但是我们通过我不确定的函数得到它

def getObject(vector):
    objectId = vector[0]
    x = vector[1]
    y = vector[2]
    xEnd = baseImageSize-(x+objectSize)
    yStart =baseImageSize- (y+objectSize)

    padding = tf.convert_to_tensor([[x, xEnd], [yStart, y],[0,0]])

    RTensor = tfObjectMatrix[objectId,:,:,0:1]
    GTensor = tfObjectMatrix[objectId,:,:,1:2]
    BTensor = tfObjectMatrix[objectId,:,:,2:3]
    ATensor = tfObjectMatrix[objectId,:,:,3:4]

    paddedR = tf.pad(tensor = RTensor,
        paddings= padding,
        mode='Constant',
        name='padAverageRed',
        constant_values=255)

    ...
    generates padding for every channel
    ...

    finalTensor=tf.concat([paddedR, paddedG, paddedB, paddedA], 2)
    return finalTensor

tfObjectMatrix 是一个永远不会改变的图像列表。 我确实检查了我是否能够从op 生成tf.gradient,结果证明是有效的。我不确定这是否足以让反向传播发挥作用。

感谢您的时间和精力。任何意见都将不胜感激。

【问题讨论】:

    标签: tensorflow machine-learning neural-network backpropagation


    【解决方案1】:

    TensorFlow默认反向传播到所有东西。根据您的代码,所有内容都将通过优化器的训练操作接收梯度。所以要回答你的问题,反向传播起作用。

    唯一需要考虑的是,您说tfObjectMatrix 是一个不会更改的图像列表。所以您可能希望它接收任何渐变。因此,您可能想查看 tf.stop_gradient() 并可能像 OM = tf.stop_gradient( tfObjectMatrix ) 一样使用它,并在您的函数中使用 OM

    【讨论】:

    • 谢谢,erhm 可能是个愚蠢的问题,但我为什么不想接收任何渐变?
    • 你希望你训练的东西接收梯度,主要是权重和偏差。如果你有一些不变的东西并且你想保持这种状态 (tfObjectMatrix) 那么你为什么要让它接收渐变并被改变呢?
    • 这个想法是训练vector的值,即函数的输入。那么我能否以某种方式不计算图像的梯度,而是计算向量的值? (我猜想tf.stop_gradient()
    • 那会很困难。 vector[ 0 ] 不能训练,那是一个索引,不能逐渐改变。与vector[ 1 ]vector[ 2 ] 相同。我认为tf.pad 不会为填充大小提供渐变。如果你想这样做,你必须想出一种方法,将vector 的元素用作浮点数。你应该看看tf.gradients( op, vector[ 1 : ] ) 是否有效,或者它是否抱怨那些没有连接。
    • 好吧,也许您可​​以设计vector[ 0 ],使其对所有图像都具有某种权重,对其执行总和为 1,然后基于它线性组合所有图像。如果这是您想要的,那将合并到其中一张图像。对于填充学习,我没有任何想法。问题是它也会改变张量的大小,这在训练开始后通常是不可能的。
    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多