本節課分爲兩部分,第一部分介紹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