機(jī)器學(xué)習(xí)必備:TensorFlow的11個(gè)使用技巧整理_第1頁
機(jī)器學(xué)習(xí)必備:TensorFlow的11個(gè)使用技巧整理_第2頁
機(jī)器學(xué)習(xí)必備:TensorFlow的11個(gè)使用技巧整理_第3頁
機(jī)器學(xué)習(xí)必備:TensorFlow的11個(gè)使用技巧整理_第4頁
機(jī)器學(xué)習(xí)必備:TensorFlow的11個(gè)使用技巧整理_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、機(jī)器學(xué)習(xí)必備:TensorFlow的11個(gè)使用技巧整理TensorFlow2.x在構(gòu)建模型和總體使用方面提供了很多便利。那么,在tf中有什么新功能?使用Keras輕松進(jìn)行模型構(gòu)建;在任何平臺(tái)上的生產(chǎn)中都可以進(jìn)行穩(wěn)健的模型部署;強(qiáng)大的研究實(shí)驗(yàn);通過清理不推薦使用的API來簡化各個(gè)步驟在本文中,我們將探索TF 2.0的10個(gè)功能,這些功能讓TensorFlow的使用更加順暢,減少了代碼行并提 高了效率,因?yàn)檫@些函數(shù)/類屬于TensorFlow API。1.用于構(gòu)建輸入管道的tf.data APItf.data API提供了用于數(shù)據(jù)管道和相關(guān)操作的功能。我們可以構(gòu)建管道,映射預(yù)處理功能,洗牌或批量處

2、 理數(shù)據(jù)集等等。利用張量構(gòu)建管道 dataset = tf.data.Dataset.from_tensor_slices(8, 3, 0, 8, 2, 1) iter(dataset).next().numpy()8洗牌和批量處理數(shù)據(jù)集Shuffle dataset = tf.data.Dataset.from_tensor_slices(8, 3, 0, 8, 2, 1).shuffle(6) iter(dataset).next().numpy()0Batch dataset = tf.data.Dataset.from_tensor_slices(8, 3, 0, 8, 2, 1).b

3、atch(2) iter(dataset).next().numpy() array(8, 3, dtype=int32)# Shuffle and Batch dataset = tf.data.Dataset.from_tensor_slices(8, 3, 0, 8, 2, 1).shuffle(6).batch(2) iter(dataset).next().numpy()array(3, 0, dtype=int32)壓縮兩個(gè)數(shù)據(jù)集 dataset0 = tf.data.Dataset.from_tensor_slices(8, 3, 0, 8, 2, 1) dataset1 = t

4、f.data.Dataset.from_tensor_slices(1, 2, 3, 4, 5, 6) dataset = tf.data.Dataset.zip(dataset0, dataset1) iter(dataset).next()(, )映射外部函數(shù)def into_2(num):return num * 2 dataset = tf.data.Dataset.from_tensor_slices(8, 3, 0, 8, 2, 1).map(into_2) iter(dataset).next().numpy()16圖像數(shù)據(jù)生成器這是tensorflow.keras API的最佳

5、特性之一(在我看來)。圖像數(shù)據(jù)生成器能夠在批處理和預(yù)處理過程中生成數(shù) 據(jù)集切片,并實(shí)時(shí)進(jìn)行數(shù)據(jù)擴(kuò)充。生成器允許直接從目錄或數(shù)據(jù)幀進(jìn)行數(shù)據(jù)流。對圖像數(shù)據(jù)生成器中的數(shù)據(jù)擴(kuò)充的一個(gè)誤解是,它向現(xiàn)有的數(shù)據(jù)集中添加了更多的數(shù)據(jù)。雖然這是數(shù)據(jù)增 強(qiáng)的實(shí)際定義,但在圖像數(shù)據(jù)生成器中,數(shù)據(jù)集中的圖像在訓(xùn)練過程中會(huì)在不同的步驟進(jìn)行動(dòng)態(tài)轉(zhuǎn)換,這 樣模型就可以在沒有看到的噪聲數(shù)據(jù)上進(jìn)行訓(xùn)練。train_datagen = ImageDataGenerator( rescale=1./255,shear_range=0.2, zoom_range=0.2,horizontal_flip=True)在這里,對所有樣本進(jìn)

6、行重新縮放(用于規(guī)格化),而其他參數(shù)則用于擴(kuò)充。train_generator = train_datagen.flow_from_directory(data/train,target_size=(150, 150),batch_size=32,class_mode=binary)我們?yōu)閷?shí)時(shí)數(shù)據(jù)流指定目錄,這也可以使用數(shù)據(jù)幀來完成。train_generator = flow_from_dataframe(dataframe,x_col=filename,y_col=class,class_mode=categorical,batch_size=32)x_col參數(shù)定義圖像的完整路徑,而y_

7、col參數(shù)定義用于分類的標(biāo)簽列。該模型可直接與生成器供電。盡管需要指定steps_per_epoch參數(shù),實(shí)際上是采樣數(shù)/批量大小。model.fit(train_generator, validation_data=val_generator,epochs=EPOCHS, steps_per_epoch=(num_samples / batch_size),validation_steps=(num_val_samples / batch_size) )3.使用tf.image進(jìn)行數(shù)據(jù)擴(kuò)充數(shù)據(jù)擴(kuò)充是必要的,在數(shù)據(jù)不足的情況下,對數(shù)據(jù)進(jìn)行更改并將其視為單獨(dú)的數(shù)據(jù)點(diǎn)是在較少數(shù)據(jù)下進(jìn)行 訓(xùn)練的一種

8、非常有效的方法。tf.image API具有用于轉(zhuǎn)換圖像的工具,以后可以通過前面討論的tf.data API將其用于數(shù)據(jù)增強(qiáng)。flipped = tf.image.flip_left_right(image) visualise(image, flipped)以上代碼的輸出結(jié)果以上代碼的輸出結(jié)果saturated = tf.image.adjust_saturation(image, 5) visualise(image, saturated)以上代跳輸出結(jié)果以上代碼的輸出結(jié)果rotated = tf.image.rot90(image)visualise(image, rotated)Aug

9、rntntad Ie驊以上代蹄輸出結(jié)果以上代碼的輸出結(jié)果cropped = tf.image.central_crop(image, central_fraction=0.5) visualise(image, cropped)以上代碼的輸出結(jié)果4. TensorFlow 數(shù)據(jù)集pip install tensorflow-datasets這是一個(gè)非常有用的庫,因?yàn)樗寝D(zhuǎn)儲(chǔ)來自Tensorflow收集的來自各個(gè)域的非常知名的數(shù)據(jù)集的唯一起點(diǎn)。import tensorflow_datasets as tfdsmnist_data = tfds.load(mnist)mnist_train, m

10、nist_test = mnist_datatrain, mnist_datatestassert isinstance(mnist_train, tf.data.Dataset)tensorflow數(shù)據(jù)集可在下方鏈接中找到: HYPERLINK /datasets/catalog/overview /datasets/catalog/overview音頻,圖像,圖像分類,對象檢測,結(jié)構(gòu)化,摘要,文本,翻譯,視頻是tfds提供的類型。5.基于預(yù)訓(xùn)練模型的遷移學(xué)習(xí)遷移移動(dòng)學(xué)習(xí)是機(jī)器學(xué)習(xí)中的一個(gè)新熱點(diǎn)。如果一個(gè)基準(zhǔn)模型巳經(jīng)被其他人訓(xùn)練過,那對于我們來說這個(gè) 模型就不再適用,也不切實(shí)際。遷移學(xué)習(xí)解決

11、了這個(gè)問題,預(yù)先訓(xùn)練的模型可以為給定的用例重新使用, 也可以為不同的用例進(jìn)行擴(kuò)展。TensorFlow提供了基準(zhǔn)的預(yù)訓(xùn)練模型,可以很容易地?cái)U(kuò)展到所需的用例。base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE, include_top=False,weights=imagenet )這個(gè)base_model可以輕松地通過附加層或不同模型進(jìn)行擴(kuò)展ai服務(wù)器,例如:model = tf.keras.Sequential(base_model,global_average_layer,prediction_layer

12、)估算器估算器是TensorFlow完整模型的高級(jí)表示,其設(shè)計(jì)目的是易于縮放和異步訓(xùn)練-TensorFlow文檔預(yù)制的估算器提供了非常高級(jí)的模型抽象,因此你可以直接專注于訓(xùn)練浪潮服務(wù)器模型,而不必?fù)?dān)心較低 級(jí)別的復(fù)雜性。例如:linear_est = tf.estimator.LinearClassifier(feature_columns=feature_columns)linear_est.train(train_input_fn)result = linear_est.evaluate(eval_input_fn)這表明使用tf.estimator構(gòu)建和訓(xùn)練估算器非常容易,估算器也可以自

13、定義。TensorFlow 有許多預(yù)制的估算器,包括 LinearRegressor, BoostedTreesClassifier 等??梢匀?Tensorflow 文檔 了解完整內(nèi)容。自定義層對于許多層深層網(wǎng)絡(luò)而言,神經(jīng)網(wǎng)絡(luò)是眾所周知的,其中層可以是不同類型的。TensorFlow包含許多預(yù)定 義的層(例如Dense,LSTM等)。但是對于更復(fù)雜的體系結(jié)構(gòu),層的邏輯要比主層復(fù)雜得多。對于此類實(shí) 例,TensorFlow允許構(gòu)建自定義層。這可以通過對tf.keras.layers.Layer類進(jìn)行子類化來完成。class CustomDense(tf.keras.layers.Layer):

14、 def _init_(self, num_outputs): super(CustomDense, self)._init_() self.num_outputs = num_outputsdef build(self, input_shape):self.kernel = self.add_weight(kernel,shape=int(input_shape-1),self.num_outputs)def call(self, input):return tf.matmul(input, self.kernel)如文檔中所述,實(shí)現(xiàn)自己的層的最佳方法是擴(kuò)展tf.keras.Layer類并實(shí)

15、現(xiàn):_init_,您可以在其中進(jìn)行所有與輸入無關(guān)的初始化。構(gòu)建,您可以在其中知道輸入張量的形狀,并可以進(jìn)行其余的初始化。調(diào)用,您可以在其中進(jìn)行前向計(jì)算。盡管可以在init本身中完成內(nèi)核初始化,但最好在build中進(jìn)行初始化,否則,你將必須在新圖層創(chuàng)建 的每個(gè)實(shí)例上顯示指定input_shape。8.定制化訓(xùn)練tf.keras序列和模型API使訓(xùn)練模型更容易。但是,大多數(shù)時(shí)候在訓(xùn)練復(fù)雜模型時(shí)會(huì)使用人工智能服務(wù)器 自定義損失函數(shù)。此外,模型訓(xùn)練也可以與默認(rèn)訓(xùn)練不同(例如,將梯度分別應(yīng)用于不同的模型組件)。TensorFlow的自動(dòng)微分有助于以有效的方式計(jì)算梯度,這些原語用于定義自定義訓(xùn)練循環(huán)。de

16、f train(model, inputs, outputs, learning_rate):with tf.GradientTape() as t:# Computing Losses from Model Predictioncurrent_loss = loss(outputs, model(inputs)# Gradients for Trainable Variables with Obtained Losses dW, db = t.gradient(current_loss, model.W, model.b)Applying Gradients to Weightsmodel.

17、W.assign_sub(learning_rate * dW)model.b.assign_sub(learning_rate * db)可以針對多個(gè)時(shí)期重復(fù)此循環(huán),并根據(jù)用例使用更自定義的設(shè)置。9.檢查點(diǎn)保存TensorFlow模型可以有兩種類型:SavedModel:保存模型的完整狀態(tài)以及所有參數(shù)。這與源代碼無關(guān)。model.save_weights(checkpoint)檢查點(diǎn)檢查點(diǎn)捕獲模型使用的所有參數(shù)的精確值。使用Sequential API或Model API構(gòu)建的模型可以簡單地以 SavedModel格式保存。但是,對于自定義模型,需要檢查點(diǎn)。檢查點(diǎn)不包含對模型定義的計(jì)算的任何

18、描述,因此通常僅在將使用保存的參數(shù)值的源代碼可用時(shí)才有用。保存檢查點(diǎn)checkpoint_path = save_path”Defining a Checkpointckpt = tf.train.Checkpoint(model=model, optimizer=optimizer)Creating a CheckpointManager Objectckpt_manager = tf.train.CheckpointManager(ckpt, checkpoint_path, max_to_keep=5)Saving a Modelckpt_manager.save()從檢查點(diǎn)加載Tens

19、orFlow通過遍歷具有命名邊的有向圖,從加載的對象開始,將變量與檢查點(diǎn)值匹配。通過文檔進(jìn)行模型恢復(fù)的依賴圖if ckpt_manager.latest_checkpoint: ckpt.restore(ckpt_manager.latest_checkpoint)10. Keras Tuner這是TensorFlow中的一個(gè)相當(dāng)新的功能。!pip install keras-tuner超參數(shù)調(diào)整(Hyper parameter tuning,Hypertuning)是對定義ML模型配置的參數(shù)進(jìn)行篩選的過程。這些因素 是特征工程和預(yù)處理后模型性能的決定因素。# model_builder is

20、 a function that builds a model and returns it tuner = kt.Hyperband(model_builder,objective=val_accuracy,max_epochs=10,factor=3,directory=my_dir,project_name=intro_to_kt)除了 hyperand 之外,bayesianomptimization 和 RandomSearch 也可用于調(diào)整。tuner.search( img_train, label_train,epochs = 10,validation_data=(img_test,label_test),callbacks=ClearTrainingOutput()# Get the optimal hyperparametersbest_hps = tuner.get_best_hyperparameters(num_trials=1)0此外,我們使用最佳超參數(shù)訓(xùn)練模型:model = tuner.hypermodel.build(best_hps)model.fit(img_train,label_train,epochs=10,va

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論