如何在Tensorflow中设置我的损失操作的名称?

问题描述:

在Tensorflow中,我可以为操作和张量指定名称以便稍后检索它们。例如,在一个功能我可以做如何在Tensorflow中设置我的损失操作的名称?

input_layer=tf.placeholder(tf.float32, shape= [None,300], name='input_layer') 

然后在以后的其他功能,我可以做

input_layer=get_tensor_by_name('input_layer:0') 

我开始相信,这是很方便的让我的TF代码尽可能模块化。

我想能够做到这一点与我的损失,但我怎么可以分配一个自定义名称,该操作?问题在于,损失函数中的内部版本(例如tf.losses.mean_squared_error)没有名称参数(与tf.placeholder,tf.variable等不同)。

我指的是我的损失目前的方式是

tf.get_collection(tf.GraphKeys.LOSSES)[-1] 

(检索已添加到图中的最后损失的操作)。我错过了明显的东西吗?

我知道这不完全是答案,但它是一个可以为你工作的修复程序。鉴于此,为你指出的,在tf.losses.mean_squared_error功能没有name参数,你可以实现自己的MSE(根据课程的TF操作)

只需更换

tf_loss = tf.losses.mean_squared_error(labels,predictions) 

随着

custom_loss = tf.reduce_mean(tf.squared_difference(labels,predictions),name='loss') 

而作为reduce_mean不接受name参数,你可以得到你想要的。

完整的示例代码中here

我猜使用非训练的变量应该做的伎俩:

labels = np.random.normal(size=10) 
predictions = np.random.normal(size=10) 

sess = tf.Session() 
loss_var = tf.Variable(10.0, name='mse_loss', trainable=False, dtype=tf.float32) 

loss = tf.losses.mean_squared_error(labels, predictions) 
mse_loss = loss_var.assign(loss) 

sess.run(mse_loss) 
print(sess.run(tf.get_default_graph().get_tensor_by_name('mse_loss:0')))