约束优化,在NN中的自定义损失函数中添加一个附加项



我正在努力为我的损失函数(Keras,tensorflow(添加额外的约束

我原来的损失函数是:

self.__loss_fn = tf.reduce_mean( 
tf.square( self.__psiNNy 
- tf.matmul(self.__psiNNx, self.__K) ) 

附加约束与强制统一性有关(K.T K=1(。所以,我的新损失函数看起来像

self.__loss_fn = tf.reduce_mean( 
tf.square( self.__psiNNy 
- tf.matmul(self.__psiNNx, self.__K) ) )
+ tf.multiply(alpha, tf.matmul(tf.transpose(self.__K),self.__K)-1))

其中alpha表示惩罚系数。

运行代码,而不是为损失提供奇异值。它给出了一个数组:

Epoch -  0  Loss -  [[-0.3633499  -1.2530719  -1.29390422 ... -0.90075779 -0.81838405
-0.94197399]
[-1.2530719  14.31707269 14.78048348 ... -5.04269215 -5.24336678
-0.27613182]
[-1.29390422 14.78048348 15.89136624 ... -5.83845412 -6.28395005
-0.08354599]
...
[-0.90075779 -5.04269215 -5.83845412 ...  1.25852317  0.25653466
-0.60421091]
[-0.81838405 -5.24336678 -6.28395005 ...  0.25653466  5.08378911
-4.45022781]
[-0.94197399 -0.27613182 -0.08354599 ... -0.60421091 -4.45022781
2.03832155]]  LR -  0.0001 Time -  1.472019910812378

我希望你能帮助

酉矩阵应该乘以单位矩阵,而不是一。同样,你在矩阵空间中,所以你需要一个范数来表示";到单位矩阵的距离";。

换句话说,

loss(K) = 1/N || K'K - I ||^2
tf.reduce_mean(tf.square( tf.matmul(tf.transpose(self.__K),self.__K) - tf.eye(N) ))

其中CCD_ 1是CCD_。

相关内容

最新更新