在过去的几天里,我一直在大量修改Tensorflow,但是我不确定我编写的函数是否会破坏神经网络中的反向传播。我以为在尝试将此功能集成到NN中之前会先问一下。所以基本设置是我想添加两个矩阵

op = tf.add(tfObject, tfImageBackground)


其中tfImageBackground是一些恒定的图像。 (即RGBA图像的大小为800、800,R = G = B = A = 0),而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是永不更改的图像列表。
我确实检查了是否能够从tf.gradient生成op,事实证明它可以正常工作。我不确定这是否足以使反向传播起作用。

感谢您的时间和精力。任何输入将不胜感激。

最佳答案

TensorFlow默认会反向传播到所有内容。根据您的代码,所有内容都会通过优化程序的训练操作获得渐变。因此,回答您的问题,反向传播将起作用。

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

关于tensorflow - 不确定函数是否会破坏反向传播,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50318493/

10-13 07:02