最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【TF/Guide筆記】 05. Modules, layers and models

2022-02-28 18:00 作者:紀一希  | 我要投稿

? ? 前面看到的那些Tensor,Variable,Graph之類的東西,都是比較直接的對應到底層實現(xiàn)的,這些東西很可能是直接從c++代碼pybind過來的。

? ? 到了module這一層,基本上就是利用python在用戶一層的封裝了,為的都是怎么更方便的調(diào)用底層代碼。

? ? 例如只要繼承了tf.Module類,內(nèi)部聲明的Variable都會被記錄下來,可以通過trainable_variables查看,類似的功能我們以前也做過,不過由于不熟悉python特性,所以寫的比較丑陋。從原理上推測,雖然Module是可以遞歸的檢查出sub module內(nèi)的Variable的,但真正的實現(xiàn)應該還是累加式的而不是真的遞歸去找的。

? ? 文檔里有說,Module子類關于計算圖聲明的部分,并不一定要寫在__call__下,文檔自己為了看著舒服才這么寫的,從這兒也能看出Module最重要的功能還是管理內(nèi)部的Variable,管理則是為了在后面方便你做統(tǒng)一的IO。

? ? Module規(guī)定了一套統(tǒng)一的輸出格式,metadata里放的是模型結構,data里放的是Variable的值,這個結構是在應用層規(guī)定的,而不是底層必須的,也就是說你自己展開來寫py的話,完全可以把需要的東西存成其他格式(雖然沒必要)。

? ? 由于eager execution相當于腳本語言,所以module恢復的也是腳本語言,如果使用tf.function,也就是建立計算圖的話,那么你的環(huán)境里只需要有tf最核心的代碼就可以運行這個模型,所謂的平臺之間遷移,無非是因為他們最底下共用的東西是一樣的。

? ? 但是tf.function的多態(tài)是在python層面做的,如果只load上來計算圖的話,就沒有東西去兼容不同格式的輸入了。關于多態(tài)還有個小問題,文檔里樣例代碼使用的輸入都是數(shù)組而非Variable,這就導致你把[2, 2, 2]換成[2, 3, 3]都會觸發(fā)多態(tài)。


? ? Keras模塊下的代碼估計都是針對python層面的封裝,繼承自keras.layers.Layer的子類就不能再隨意給計算圖的函數(shù)起名了,這里必須使用call。

? ? build函數(shù)相當于把前面提過的if判斷幫你省略了,獨立出聲明Variable的過程也許還有其他好處,不過這里其實隱式的假設了只能有一個tensor變量作為輸入,大數(shù)據(jù)下的確是這樣沒錯,只是多少有點跟前面的文檔脫節(jié)。

????keras和module是不能混用的,沒法遞歸里面的Variable。

????可以先聲明計算圖,然后直接用輸入和輸出構造一個keras.Model,這里可以看出,keras內(nèi)部關于計算圖的部分是默認帶tf.function修飾的,并非eager execution。這種脫離輸入數(shù)據(jù)的聲明可以用keras.Input作為placeholder,不確定的維度填None,不過這里的維度要比x少一位,首位被默認填了None,因為通常第一維都是數(shù)據(jù)行數(shù),這個肯定是無法提前確定的。

? ? keras也可以通過tf.saved_model讀寫,但這并不是因為tf.saved_model是個萬能IO模塊,而是因為tf.saved_model是針對tf.Module實現(xiàn)的,而keras又是基于tf.Module實現(xiàn)的,所以兩者可以混用罷了。

【TF/Guide筆記】 05. Modules, layers and models的評論 (共 條)

分享到微博請遵守國家法律
从化市| 华蓥市| 新宾| 故城县| 岱山县| 桑植县| 剑河县| 灵台县| 玉屏| 乌苏市| 德格县| 张掖市| 北川| 安龙县| 东明县| 定陶县| 澄城县| 全州县| 吉安县| 西峡县| 南投县| 榕江县| 东光县| 金乡县| 邯郸县| 北流市| 科尔| 南昌县| 张家口市| 静安区| 石景山区| 克山县| 天等县| 清流县| 八宿县| 文成县| 治多县| 卓资县| 临朐县| 金寨县| 昆明市|