2017-09-16 73 views
1

在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] 

(檢索已添加到圖中的最後損失的操作)。我錯過了明顯的東西嗎?

回答

3

我知道這不完全是答案,但它是一個可以爲你工作的修復程序。鑑於此,爲你指出的,在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

3

我猜使用非訓練的變量應該做的伎倆:

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')))