不确定函数是否会破坏反向传播

在过去的几天里,我一直在尝试使用TensorFlow,但我不确定我编写的函数是否会破坏神经网络中的反向传播。在尝试将这个函数集成到神经网络之前,我想在这里问问。基本设置是我想用以下方式添加两个矩阵:

op = tf.add(tfObject, tfImageBackground)

其中tfImageBackground是一个常量图像(例如,一个尺寸为800×800的RGBA图像,其中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是一组不会改变的图像。我确实检查了是否能够从op生成tf.gradient,结果是可以的。不过,我不确定这是否足以让反向传播正常工作。

感谢你们的时间和努力。任何输入都将不胜感激。


回答:

TensorFlow默认情况下会对所有内容进行反向传播。根据你的代码,所有内容都会在优化器的训练操作中接收梯度。所以回答你的问题,反向传播工作。

唯一需要考虑的是,你说tfObjectMatrix是一组不会改变的图像。所以你可能不希望它接收任何梯度。因此,你可能需要考虑使用tf.stop_gradient(),并像OM = tf.stop_gradient( tfObjectMatrix )这样使用,然后在你的函数中使用OM

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注