Tensorflow 自定义层(TF/Keras)的反向传播问题

Tensorflow 自定义层(TF/Keras)的反向传播问题,tensorflow,neural-network,keras,artificial-intelligence,conv-neural-network,Tensorflow,Neural Network,Keras,Artificial Intelligence,Conv Neural Network,我一直在开发一个原型,但我在反向传播方面遇到了问题。我目前正在使用最新的keras和tensorflow构建(作为tensorflow的后端,我研究了cntk、mxnet和chainer;到目前为止,只有chainer允许我这么做,但培训时间相当缓慢……) 我的当前层类似于卷积层,它的运算比简单的乘法要多 我知道tensorflow应该使用自动微分,如果所有操作都支持它来计算梯度并执行梯度下降 目前,我的图层使用以下运算符:reduce_sum、sum、减法、乘法和除法 我还依赖于以下方法:提取

我一直在开发一个原型,但我在反向传播方面遇到了问题。我目前正在使用最新的keras和tensorflow构建(作为tensorflow的后端,我研究了cntk、mxnet和chainer;到目前为止,只有chainer允许我这么做,但培训时间相当缓慢……)

我的当前层类似于卷积层,它的运算比简单的乘法要多

我知道tensorflow应该使用自动微分,如果所有操作都支持它来计算梯度并执行梯度下降

目前,我的图层使用以下运算符:reduce_sum、sum、减法、乘法和除法

我还依赖于以下方法:提取图像补丁、重塑、转置

我怀疑这些都会导致自动梯度下降的问题。我构建了两个层作为测试,一个从keras中的基础层继承,另一个直接从_Conv继承。在这两种情况下,无论何时我在模型中的任何位置使用该层,在训练过程中都不会更新权重

如何解决此问题并修复反向传播

编辑: (以下是层实现


对于测试,请参见)

错误是什么?您必须包含代码,否则没有人能告诉您太多。@LukeDinh没有错误消息,但训练过程后所有权重都相同。因此,比较训练前后的权重和偏差只会产生零数组,这不是使用cnn的情况。@MatiasValdenegro完整的层实现位于此处。您是否尝试查看tf.梯度(输出,变量)的输出,其中输出=my_层(输入)?这将告诉您是否正确计算了渐变。