使用Keras,我想看看限制在密集层中对内核的影响,例如-如果将其限制为对称或反对称,会发生什么?
非常简单的示例:图层
keras.layers.Dense(2, activation=None, use_bias=False, input_shape(1,))
具有两个可训练的参数a(0)和a(1),我希望启用a(0)=-a(1)。我尝试使用自定义约束(投影到可允许的内核上),例如
proj=tf.constant([1.0,0.0,-1.0,0.0],shape=[2,2])
myw = math_ops.matmul(proj,tf.reshape(w,[2,1]))
return tf.reshape(myw,[1,2])
强制a(0)=-a(1)。尽管在这种简单情况下确实可行,但至少会感到不对劲,因为在学习阶段,渐变不会考虑此投影。另外,还有一个可训练的参数,它不会影响结果。
实现此目标的正确方法是什么(当然,对于更大的尺寸和更复杂的投影)?
直接的方法似乎是编写一个自定义层,但是我对此没有任何经验。