天天看點

tensorflow2是指_關于TensorFlow 2.0,這裡有你想知道的一切

全文共 8094字,預計學習時長 30分鐘或更長
tensorflow2是指_關于TensorFlow 2.0,這裡有你想知道的一切

圖檔來源:pexels.com/@pixabay

TensorFlow是谷歌2015年開源的通用高性能計算庫。最初主要是為建構神經網絡(NNs)提供高性能的API。然而,随着時間的推移和機器學習(ML)社群的興起,TensorFlow已經發展為一個完整的機器學習生态系統。

tensorflow2是指_關于TensorFlow 2.0,這裡有你想知道的一切

TensorFlow自誕生以來變化巨大。TensorFlow 2.0目前處于測試階段,與TF1.x相比有了許多變化。下面是主要的幾個變化。

1. 預設狀态的Eager Execution

首先,eager execution是運作TF代碼的預設方式。

為了在TF1.x中建構一個神經網絡,需要定義一個名為圖形(Graph)的抽象資料結構。另外,如果試圖列印其中一個圖節點,将看不到期望值,卻可以看到對圖節點的引用。實際上,要運作圖形,需要使用一個名為會話(Session)的封裝。使用Session.run()法,可以将Python資料傳給圖形,并對模型進行實際訓練。

tensorflow2是指_關于TensorFlow 2.0,這裡有你想知道的一切

TF 1.x代碼示例

利用eager execution可以進行改變。現在,TensorFlow代碼可以像普通的Python代碼一樣運作。這意味着可以迅速建立并評估操作。

tensorflow2是指_關于TensorFlow 2.0,這裡有你想知道的一切

Tensorflow 2.0代碼示例

TensorFlow 2.0代碼看起來很像NumPy代碼。事實上,TensorFlow和NumPy的對象可以很容易地切換。是以不必擔心占位符、會話、feed_dictionaties等問題。

2. API清理

許多API,如tf.gans、tf.app、tf.contrib、tf.flags,會被清理或移動到單獨的存儲庫。

然而,最重要的清理之一涉及到我們如何構模組化型。TF1.x中有超過1或2種不同的建構/訓練ML模型的方法。

tf.slim,tf.layers,tf.contrib.layers,tf.keras都是可以用來建構神經網絡的API。不包括TF1.x中的序列到API序列。大多數情況下,每種情況下要選擇哪一種尚不明确。

盡管許多API性能良好,但似乎并沒有收斂出一種通用的開發方式。此外,如果在其中一個API中訓練模型,那麼使用其他API來再利用該代碼并不簡單。

在TF2.0中,tf.keras是推薦的進階API。

可以看到,目前正試圖利用KerasAPI解決所有可能的用例。

3. 初學者API

與1.0版本相比,2.0版本中的初學者API變化不大。但是現在,Keras為預設和推薦的進階API。總之,Keras指的是一組圖層,通過使用明确的标準來建構神經網絡。使用pip安裝TensorFlow時,一般會得到完整的Keras API和一些附加功能。

model= tf.keras.models.Sequential()model.add(Flatten(input_shape=(IMAGE_HEIGHT,IMAGE_WIDTH)))model.add(Dense(units=32,activation='relu'))model.add(Dropout(0.3))model.add(Dense(units=32,activation='relu'))model.add(Dense(units=10,activation='softmax')) #Configures the model for training.#Define the model optimizer, the loss function and the accuracy metricsmodel.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])model.summary()
           

初學者API稱為序列化,一般會将神經網絡定義為一組層。除了簡單性,它還有其他優點。請注意,模型是根據資料結構(一組層)來定義的。是以,由于模型定義而産生錯誤的機率降至最低。

4. Keras-Tuner

Keras-tuner是一個對Keras模型進行超參數調整的專用庫。在撰寫本文時,該庫處于α之前的狀态,但是使用tf.keras和TensorFlow 2.0β可以在Colab上很好地運作。

傳送門:https://github.com/keras-team/keras-tuner

這個概念非常簡單。首先,需要定義一個傳回編譯後的Keras模型的模組化函數。函數接受一個名為hp的參數作為輸入。通過使用hp,可以定義一個候選值的範圍,對超參數值進行采樣。

下面建立了一個簡單的模型,并對3個超參數進行了優化。為了檢視隐藏單元,對預定義範圍之間的整數值進行采樣。為了計算丢失率和學習率,在一些給定值之間随機選擇。

defbuild_model(hp): # define the hyper parameter ranges for thelearning rate, dropout and hidden unit hp_units = hp.Range('units', min_value=32,max_value=128, step=32) hp_lr = hp.Choice('learning_rate',values=[1e-2, 1e-3, 1e-4]) hp_dropout = hp.Choice('dropout',values=[0.1,0.2,0.3])  # build a Sequential model model = keras.Sequential() model.add(Flatten(input_shape=(IMAGE_HEIGHT,IMAGE_WIDTH))) model.add(Dense(units=hp_units,activation='relu')) model.add(Dropout(hp_dropout)) model.add(Dense(units=32, activation='relu')) model.add(layers.Dense(10,activation='softmax'))  # compile and return the model model.compile(optimizer=keras.optimizers.Adam(hp_lr), loss='sparse_categorical_crossentropy', metrics=['accuracy']) return model #create a Random Search tunertuner= RandomSearch( build_model, objective='val_accuracy', # define themetric to be optimized over max_trials=3, executions_per_trial=1, directory='my_logs') # define the outputlog/checkpoints folder  # start hyper-parameter optmization searchtuner.search(x_train,y_train, epochs=2, validation_data=(x_test, y_test))
           

然後建立一個調諧器對象。在這種情況下,會實作随機搜尋政策。最後可以使用search() 開始優化。它具有與 fit()相同的簽名。

最後,可以檢查調諧器的結論,并選擇最佳模型。請注意,訓練日志和模型檢查點都儲存在目錄檔案夾(my_logs)中。此外,最小化或最大化目标(驗證精度)的選擇是自動推斷的。

5. 進階API

當你看到這種類型的implementation時,要追溯到面向對象程式設計。這裡的模型是一個擴充tf.keras.Model的Python類。模型子類化是由Chainer提出的,與PyTorch如何定義模型有很大關聯。

通過模型子類化來定義類構造函數中的模型層。call()負責正推法的定義和執行。

class Model(tf.keras.Model): def__init__(self): # Define thelayers here super(Model,self).__init__() self.conv1 =Conv2D(filters=8, kernel_size=4, padding="same