不确定函数是否会破坏反向传播
Unsure whether function breaks backpropagation
在过去的几天里,我一直在对 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 默认情况下会[=23=]反向传播到所有内容。根据您的代码,所有内容都将通过优化器的训练操作接收梯度。因此,为了回答您的问题,反向传播 将 起作用。
唯一要考虑的是,您说 tfObjectMatrix
是不会更改的图像列表。所以您可能不希望它接收任何渐变。因此,您可能想查看 tf.stop_gradient()
并可能像 OM = tf.stop_gradient( tfObjectMatrix )
一样使用它,并在您的函数中使用 OM
。
在过去的几天里,我一直在对 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 默认情况下会[=23=]反向传播到所有内容。根据您的代码,所有内容都将通过优化器的训练操作接收梯度。因此,为了回答您的问题,反向传播 将 起作用。
唯一要考虑的是,您说 tfObjectMatrix
是不会更改的图像列表。所以您可能不希望它接收任何渐变。因此,您可能想查看 tf.stop_gradient()
并可能像 OM = tf.stop_gradient( tfObjectMatrix )
一样使用它,并在您的函数中使用 OM
。