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

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

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

課程引入session

keras搭建的model轉成estimator;框架

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

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

講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

相關文章
相關標籤/搜索