是否可以在训练过程中获取输出图层值,以便构建自定义损失函数。更具体地说,我想获取输出值并使用外部方法计算损失。我的问题是,在使用tf.global_variables_initializer()
初始化变量之前,我无法传递tf.eval()
def run_command(im_path,p):
s = 'cmd'+p.eval()
os.system(s)
im = imread(im_path)
return im
def cross_corr(y_true, y_pred):
path1 = 'path_to_input_image'
true_image = run_command(path1, y_pred)
path2 = 'path_to_predicted_image'
predicted_image = run_command(path2,y_true)
pearson_r, update_op = tf.contrib.metrics.streaming_pearson_correlation(predicted_image, true_image, name='pearson_r')
loss = 1-(tf.math.square(pearson_r))
return loss
***
***
# Create the network
***
tf.global_variables_initializer()
***
# run training
with tf.Session() as sess:
***
1条答案
按热度按时间uplii1fm1#
如果您的模型只有一个输出值,那么您可以将
tf.keras.losses.Loss
子类化,例如,一个普通的自定义损失函数(在训练中可能不是很好)实现:但是,如果您有多个输出,并希望通过相同的损失函数运行它们,则需要人工将它们组合成一个值。
我在我的一个模型中这样做,在模型的末端有一个虚拟层,如下所示:
然后,在您的自定义损失函数中,按如下方式再次解栈: