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

在过去的几天里,我一直在尝试使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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