tensorflow2.0第5章 Tensorflow Estimator使用與tf1.0


本節課分為兩部分,第一部分介紹tensorflow中estimator和特征列的API的使用,estimator是和keras平級的用於模型抽象的高級API,會使用泰坦尼克生存預測項目來詳細的講解特征抽取和estimator使用。學習完以上的基礎知識后,在第二部分中會講解tf1.0的知識點來方便大家對比2.0與1.0的區別。

第一章到第五章是本門課程的基礎內容,掌握了這5章就掌握了tensorflow的基本使用方法,1-5章主要講的是tensrflow2.0,講完第五章estimator內容之后,再講一下1.0的一些東西.

課程引入

keras搭建的model轉成estimator;

使用一些預定義的estimator(BaseLineClassifier,基線模型,通過隨機猜測的方式進行預測;LinearClassifier,是一個線性模型;DNNClassifier,是一個深度全連接的神經網路的分類器),他們都有對應的Regression用於回歸問題;

Tf.feature_column做特征工程,它是用來組織數據的,會把數據表達成一個一個的feature,然后對這些feature做一些操作,比如說one-hot編碼、embadding等等。

講tf.estimator的過程中涉及到的API列表:

Tf.keras.estimator.to_estimator,可以幫我們把keras模型給轉成estimator,有Train、evaluate等幾個接口;

Tf.estimator.BaselineClassifier;

Tf.estimator.LinearClassifier;

Tf.estimator.DNNClassifier。

在講Tf.feature_columnAPI的時候,會使用其中的這么幾個接口:

categorical_column_with_vocabulary_list;

numeric_column;

indicator_column;

cross_column。

然后再講一個keras.layers.DenseFeatures的API,它可以把Tf.feature_column這種表達的數據給讀取到網絡中來。

泰坦尼克問題引入分析

第一個實戰,如何將keras模型給轉成estimitor,然后去進行訓練和測試。

feature_collumn使用

 

keras_to_estimator

預定義estimator使用

交叉特征實戰

TF1.0引入

之上就完成了一個estimator的實戰,在estimator的實戰過程中,講解了如何去使用tf.feature_column,然后去表達數據,如何把我們的keras model轉成estimator,去進行使用,如何去使用與定義好的estimator,然后去對問題進行建模,搭建模型,然后如何在feature_columns上去做特征工程,我們用了一個交叉特征去進行了展示,在keras model給展成estimator的過程中,我們遇到了一個bug,tensorflow框架的bug。

接下來是tensorflow1.0的部分,在這部分首先通過幾個實戰,給大家講解tensorflow1.0中有但是2.0中沒有的知識。

Tf1.0實現全連接網絡,這和2.0中第一次實現的全連接網絡是一樣的,能夠體現1.0中的一些特點,包括placeholder、session、feed_dict。

Dataset使用,講1.0中使用dataset和2.0中有什么區別。

自定義estimator,2.0中推薦使用自定義estimator的方式就是,用keras構建一個模型,然后把它轉成estimator,但是1.0中不是這樣的,它有一套自定義estimator的方法。

總結2.0和1.0的區別。

講解1.0這部分所涉及到的API列表:

Tf1.0實現全連接網絡:

placeholder、tf.layers.dense(實現全連接層)、tf.train.AdamOptimizer(Adam的優化器);

tf.losses.sparse_softmax_cross_entropy(損失函數);

tf.global_variables_initializer(初始化參數)、feed_dict(填充數據)。

Dataset:(這兩個API是用來初始化dataset的,在2.0中已經沒有了)

dataset.make_one_shot_iterator、dataset.make_initializable_iterator。

自定義estimator:

tf.feature_column.input_layer(這個在2.0里邊就是tf.keras_layers.dense_features);

tf.estimator.EstimatorSpec(這個在1.0和2.0中都有的);

tf.metrics.accuracy。

TF1.0計算圖構建

TF1.0模型訓練

TF1_dataset使用

TF1_自定義estimator

API改動升級與課程總結

1.0和2.0區別:
①靜態圖和動態圖(即建好之后是否可以修改):

1.0中session、feed_dict、placeholder都是附着於圖的,先構建好圖,然后再打開一個連接把數據塞進去去進行訓練,而2.0中就不需要這樣了,所以這三個東西都不要了。同樣的1.0中dataset的make_one_shot/initializable_iterator在2.0中被移除了,因為它們也是給靜態圖做服務的。2.0中跟動態圖相關的幾個東西,eager mode、@tf.function、AutoGraph,2.0中不需要先構建好圖,而是所見即所得,可以用像普通python代碼那樣那種方式去實現圖。tf.function、AutoGraph是一種把普通python代碼轉化成tensorflow圖結構的機制,這種機制的好處:性能好(因為tensorflow的圖結構是經過特殊的優化,尤其是在GPU上)、可以導入導出為SavedModel(普通的python中的變量是不能夠保存下來的,有了tf.function之后就可以保存到tensorflow的graph_def中去了,可以導出就可以導入,這種方式可以很方便的幫助我們斷點續傳),例如python中的for/while循環可以變成tensorflow中里邊的while_loop,然后if可以變成tensorflow中的tf.cond,for _ in dataset可以變成tensorflow中的dataset.reduce等等

②API變動:

tensorflow現在有2000個API,500個在根空間下(即tf.跟着的)。一些空間被建立了但是沒有包含所有相關API,如tf.round沒有在tf.math下邊,在2.0中tf.round就被移到了tf.math下。有些API在根空間下但是很少被使用如tf.zeta,對於這類API傾向於把它放到子空間下邊去。有些經常使用,但不在根空間下,如tf.manip下的對tensor做操作的API,這種API需要放到根空間下可以保持代碼簡短。有些空間層次太深,這樣的就減少一個層次。還有些重復API,如許多layers的API,tf.layers的API都放到同一個地方tf.keras.layers下,tf.losses的API放到tf.keras.losses下邊,tf.metrics的放到tf.keras.metrics下,之后構建模型所需要的大部分API,都在tf.keras下邊。有些API有前綴但沒有建立子空間,如tf.string_strip就應該放到tf.string.strip下邊。還有重新組織的API,如tf.debugging、tf.dtypes、tf.io、tf.quantization等。

③如何將1.0代碼升級為2.0的代碼:

替換Session.run,feed_dict、tf.placeholder變成函數調用。

替換API,tf.get_variable替換為tf.Variable,variable_scope(用來幫助區分變量的,在開發tensorflow代碼的時候,可以會使用很多變量,可能會有同樣的名字,如果實在同一個命名空間下定義變量的化那么相同名字就可能沖突,variable_scope就是幫助區分這些變量的,它可以定義一個子空間,然后在這些子空間下定義的變量就不會影響其他空間的變量)被替換為以下東西的一個:tf.keras.layers.Layer、tf.keras.Model、tf.Module,它們三個會自動的定義一個命名空間,從而使得變量命名不會沖突。

升級訓練流程,2.0中使用tf.keras.Model.fit。

升級數據輸入,dataset的使用,1.0中需定義一個iterator,2.0中變成直接輸入。

本集總結

tf.estimator的使用:預定義的estimator、自定義的estimator

使用feature_column組織數據

tf1.0基礎使用

tf1.0和2.0的區別:API變動,1.0代碼如何升級為2.0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM