Корреляция Пирсона как функция потерь

Я тренирую сеть TF Feed Forward, где моя цель — делать прогнозы от 0 до 1, максимально приближенные к целевым показателям. Один обучающий экземпляр состоит примерно из 450 функций, а в наборе данных содержится около 1500 примеров. Я использую 4 слоя в своей сети, каждый с активацией Relu, а затем последний «выходной» слой имеет сигмовидную активацию. Когда я использую 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) 

Идея состоит в том, чтобы минимизировать отрицательную корреляцию, то есть максимизировать положительную корреляцию. Однако после долгих экспериментов с гиперпараметрами это по-прежнему дает мне ошибку «нан» и сообщает о корреляции «нан» Пирсона. Любые идеи относительно того, почему это может быть?


comment
почему вы используете *\ этот оператор?   -  person Nipun Wijerathne    schedule 22.10.2017
comment
Это просто разбивает строку, не имеет никакого эффекта.   -  person MHH    schedule 22.10.2017
comment
Просто из любопытства, вы сделали ставку на оптимизацию результатов геттера с помощью pearson r?   -  person dopexxx    schedule 05.10.2018


Ответы (1)


Имейте в виду, что tf.contrib.metrics.streaming_pearson_correlation() возвращает кортеж (pearson_r, update_op), поэтому, в принципе, вы должны иметь возможность передавать update_op непосредственно в optimizer.minimize().

person dopexxx    schedule 05.10.2018