最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

tensorflow實(shí)現(xiàn)在函數(shù)中用tf.Print輸出中間值

 更新時(shí)間:2020年01月21日 14:21:40   作者:sjtu_leexx  
今天小編就為大家分享一篇tensorflow實(shí)現(xiàn)在函數(shù)中用tf.Print輸出中間值,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

tensorflow由于其基于靜態(tài)圖的模式,導(dǎo)致寫代碼的時(shí)候很難調(diào)試,除了用官方的調(diào)試工具外,最直接的方法就是把中間結(jié)果輸出出來查看,然而,直接用print函數(shù)只能輸出tensor變量的形狀,而不是數(shù)值,想要輸出tensor的具體數(shù)值需要用tf.Print函數(shù)。網(wǎng)上有很多關(guān)于這個(gè)函數(shù)使用方法的說明,這里簡要介紹:

Print(
 input_,
 data,
 message=None,
 first_n=None,
 summarize=None,
 name=None
 )

參數(shù):

input_:通過這個(gè)操作的張量。 (流入的數(shù)據(jù)流)

data:計(jì)算 op 時(shí)要打印的張量列表。(用[ ]引起來的一串需要打印的東西,用逗號隔開)

message:一個(gè)字符串,錯誤消息的前綴。

first_n:只記錄 first_n 次數(shù)。負(fù)數(shù)日志,這是默認(rèn)的。

summarize:只打印每個(gè)張量的固定數(shù)目的條目。如果沒有,則每個(gè)輸入張量最多打印3個(gè)元素。

name:操作的名稱(可選)

然而網(wǎng)上大部分資源都是介紹如何在主函數(shù)中先建立一個(gè)op,再開啟一個(gè)Session執(zhí)行sess.run(op)的方法,但是如果想要輸出函數(shù)中的中間值而該值又未傳回主函數(shù)呢?這種情況下無法在函數(shù)中開啟一個(gè)新的Session,但是仍然可以用tf.Print建立op來實(shí)現(xiàn)。

import tensorflow as tf
import os

os.environ["CUDA_VISIBLE_DEVICES"] = "0"

def test():
 a=tf.constant(0)
 for i in range(10): 
  a_print = tf.Print(a,['a_value: ',a])
  a=a_print+1
 return a
 
if __name__=='__main__':
 with tf.Session() as sess:
  sess.run(test())

運(yùn)行結(jié)果:

a_print可以理解為在圖中新增了一個(gè)節(jié)點(diǎn),在后續(xù)代碼中當(dāng)有別的變量使用了a_print時(shí)(如上例a=a_print+1),就會有數(shù)據(jù)從a_print節(jié)點(diǎn)上流過,就會輸出值,而究竟會輸出幾次值呢?這其實(shí)并不是看下文中a_print被使用了幾次,而是看數(shù)據(jù)流要從該節(jié)點(diǎn)上流經(jīng)幾次,可以理解為a_print這個(gè)op被“定義”了幾次。

def test():
 a=tf.constant(0)
 a_print = tf.Print(a,['a_value: ',a])
 for i in range(10): 
  a=a_print+1
 return a
 
if __name__=='__main__':
 with tf.Session() as sess:
  sess.run(test())

如果把test()函數(shù)改成這樣,則運(yùn)行結(jié)果為:

輸出僅被執(zhí)行了一次,因?yàn)閍_print這個(gè)op只被定義了一次,雖然后面在循環(huán)里不斷被a使用,但是數(shù)據(jù)只從它身上經(jīng)過了一次,所以只會print一次,并且a_print的值永遠(yuǎn)為0,最終返回的a的值也為1。

再把代碼改成下例:

def test():
 a=tf.constant(0)
 a_print = tf.Print(a,['a_value: ',a])
 for i in range(10): 
  a_print=a_print+1
 return a
 
if __name__=='__main__':
 with tf.Session() as sess:
  sess.run(test())

運(yùn)行結(jié)果是什么也不會輸出,因?yàn)閍_print這個(gè)op沒有和別的變量發(fā)生關(guān)系,它沒有被別的變量使用,在圖里為孤立的一個(gè)節(jié)點(diǎn),沒有數(shù)據(jù)流過,就不會被執(zhí)行。

而如果改成這樣

def test():
 a=tf.constant(0)
 a_print = tf.Print(a,['a_value: ',a])
 for i in range(10): 
  a_print=a_print+1
 return a_print
 
if __name__=='__main__':
 with tf.Session() as sess:
  sess.run(test())

運(yùn)行結(jié)果

返回的a_print值為10也是正確的,因?yàn)閍_print在下文被返回,所以有數(shù)據(jù)流流經(jīng),會被執(zhí)行,而因?yàn)閍_print的定義只執(zhí)行一次,所以只會輸出一次。

以上這篇tensorflow實(shí)現(xiàn)在函數(shù)中用tf.Print輸出中間值就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

威信县| 冀州市| 波密县| 平远县| 杭锦旗| 灵宝市| 灵台县| 新和县| 屏东市| 新巴尔虎右旗| 安岳县| 宜君县| 太原市| 大洼县| 安远县| 永州市| 滨州市| 新泰市| 三明市| 杭州市| 绥中县| 中方县| 库车县| 新乡市| 启东市| 固安县| 涟水县| 汉寿县| 利辛县| 邢台县| 措美县| 赣州市| 中山市| 新昌县| 湟中县| 偃师市| 玉龙| 荥经县| 闵行区| 丽江市| 石嘴山市|