Optimization 作为损失函数的皮尔逊相关

Optimization 作为损失函数的皮尔逊相关,optimization,machine-learning,tensorflow,neural-network,pearson-correlation,Optimization,Machine Learning,Tensorflow,Neural Network,Pearson Correlation,我正在训练一个TF前馈网络,我的目标是产生尽可能接近目标分数的从0到1的预测。单个训练实例包含大约450个特征,数据集中大约有1500个示例。我在我的网络中使用了4个层,每个层都有一个Relu激活,然后最后的“out”层有一个sigmoid激活。当我使用MSE作为损失函数时,我得到了不错的(但不是最优的)结果。我尝试使用以下函数作为损失函数: # Define loss and optimizer #pearson correlation as loss function length = 44

我正在训练一个TF前馈网络,我的目标是产生尽可能接近目标分数的从0到1的预测。单个训练实例包含大约450个特征,数据集中大约有1500个示例。我在我的网络中使用了4个层,每个层都有一个Relu激活,然后最后的“out”层有一个sigmoid激活。当我使用MSE作为损失函数时,我得到了不错的(但不是最优的)结果。我尝试使用以下函数作为损失函数:

# Define loss and optimizer
#pearson correlation as loss function
length = 443

#apply regularization (l2)
Beta = 0.01
regularizer = tf.nn.l2_loss(weights['h1']) +   
tf.nn.l2_loss(weights['h2']) + tf.nn.l2_loss(weights['h3']) + 
tf.nn.l2_loss(weights['h4'])

#used to report correlation 
pearson = tf.contrib.metrics.streaming_pearson_correlation(intensity, 
Y, name="pearson")


#pearson corr. as loss?
# multiply by -1 to maximize correlation i.e. minimize negative 
correlation 
original_loss = -1 * length * tf.reduce_sum(tf.multiply(intensity, Y)) 
- (tf.reduce_sum(intensity) * tf.reduce_sum(Y))
divisor = tf.sqrt(
        (length * tf.reduce_sum(tf.square(intensity)) - 
tf.square(tf.reduce_sum(intensity)))) *\
        tf.sqrt(
        length * tf.reduce_sum(tf.square(Y)) - 
tf.square(tf.reduce_sum(Y)))

 loss_op = tf.truediv(original_loss, divisor)
 loss_op = tf.reduce_mean(loss_op + Beta * regularizer)
#Init optimizer
 optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate, 
 epsilon = 1e-09)
 train_op = optimizer.minimize(loss_op) 

其目的是最小化负相关性,即最大化正相关性。然而,在对超参数进行了大量实验之后,这仍然给了我“nan”错误,并报告了“nan”Pearson相关性。关于为什么会这样,有什么想法吗?

请注意
tf.contrib.metrics.streaming\u pearson\u correlation()
返回一个元组
(pearson\r,update\u op)
,因此原则上您应该能够将更新操作直接输入到
优化器.minimize()

为什么使用此操作符?这只是分割了行,没有效果。只是出于好奇,你敢打赌pearson r会优化getter结果吗?