TensorFlow2快速模型构建及tensorboard初体验
學習目標:
TensorFlow由谷歌開源的機器學習框架,其對常見機器學習算法的包裝性好,“開箱即用”,讓開發者能夠輕松地構建和部署各類機器學習模型,并可直接用于生產系統。TensorBoard是TensorFlow配套的一個可視化工具,它可以用來展示網絡圖、指標變化、參數分布情況等。特別是在訓練網絡的時候,我們可以設置不同的參數(比如:權重、偏置、卷積層數、全連接層數等),使用TensorBoard可以很直觀的幫我們進行參數的選擇。它通過運行一個本地服務器,監聽6006端口。在瀏覽器發出請求時,分析訓練時記錄的數據,繪制訓練過程中的圖像。 本文將進行一個簡單的使用演示。搭建一個全連接層的機器學習模型,來預測圖片的分類。 本次演示的數據集采用Fashion-MNIST,Fashion-MNIST包含了10個類別的圖像,分別是:t-shirt(T恤),trouser(牛仔褲),pullover(套衫),dress(裙子),coat(外套),sandal(涼鞋),shirt(襯衫),sneaker(運動鞋),bag(包),ankle boot(短靴)。了解TensorFlow 2 模型構建方法,掌握keras。同時結合tensorboard圖像化展示,進而進行模型的調優等。
模型目標:預測圖片分類
預測任務:
預測像素點為(28,28)的灰度照片的分類。
數據集為 tf.keras.datasets.fashion_mnist的分類數據
學習內容1:構建模型
構建方法:采用keras中的layer,一層層堆疊,然后compile
代碼:
運行結果:
可以看到采用3層全連接層,最終的準確度達到88.32%
tensorboard圖像展示:
根據上述的內容,產生的tensorboard如下:
模型可以看到了3個全連接層。
損失函數隨著迭代次數的減小情況:
準確度:
對比CNN模型:
CNN模型構建如下:
import tensorflow as tffashion_mnist = tf.keras.datasets.fashion_mnist (train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()print('訓練數據的輸入特征維度是:',train_images.shape) print('訓練數據的標簽維度是:',train_labels.shape) print('測試數據的輸入特征維度是:',test_images.shape) print('測試數據的標簽維度是:',test_labels.shape)class_names = ['T_shirt(T恤)','Trouser(褲子)','Pullover(套衫)','Dress(裙子)','Coat(外套)','Sandal(涼鞋)','Shirt(汗衫)','Sneaker(運動鞋)','Bag(包)','Ankle_boot(踝靴)']train_images = tf.expand_dims(train_images,axis=3) test_images = tf.expand_dims(test_images,axis=3) print('修正后訓練數據的輸入特征維度是:',train_images.shape) print('修正后測試數據的輸入特征維度是:',test_images.shape)input_xs = tf.keras.Input(shape=(28,28,1)) cov1 = tf.keras.layers.Conv2D(32,kernel_size=(3,3),activation='relu',padding='SAME')(input_xs) pool1 = tf.keras.layers.MaxPool2D(strides=[2,2])(cov1) norm1 = tf.keras.layers.BatchNormalization()(pool1)cov2 = tf.keras.layers.Conv2D(64,kernel_size=(3,3),activation='relu',padding='SAME')(norm1) pool2 = tf.keras.layers.MaxPool2D(strides=[2,2])(cov2) norm2 = tf.keras.layers.BatchNormalization()(pool2)cov3 = tf.keras.layers.Conv2D(128,kernel_size=(3,3),activation='relu',padding='SAME')(norm2) pool3 = tf.keras.layers.MaxPool2D(strides=[2,2])(cov3) norm3 = tf.keras.layers.BatchNormalization()(pool3)flatten = tf.keras.layers.Flatten()(norm3) dense_1 = tf.keras.layers.Dense(32,activation='relu',name='dense_1')(flatten) dense_2 = tf.keras.layers.Dropout(rate=0.2)(dense_1) dense_2 = tf.keras.layers.Dense(64,activation='relu',name='dense_2')(dense_1) dense_2 = tf.keras.layers.Dropout(rate=0.5)(dense_2) logits = tf.keras.layers.Dense(10,activation='softmax',name='predict')(dense_2)model = tf.keras.Model(inputs = input_xs,outputs=logits) model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy','mse']) print(model.summary()) tf.keras.utils.plot_model(model)tensorboard = tf.keras.callbacks.TensorBoard(histogram_freq=1)model.fit(x=train_images,y=train_labels,epochs=50,batch_size=256,verbose=2,callbacks=[tensorboard]) score = model.evaluate(x=test_images,y=test_labels) print('last loss is :' + str(score[0])) print('last accuracy is :' + str(score[1])) print('last mse is :' + str(score[2]))tensorboard圖像展示:
根據上述的內容,產生的tensorboard如下:
模型可以看到了3個卷積層和2個全連接層。
運行結果如下:
損失函數隨著迭代次數的減小情況:
精確度:
準確率達到91.53%。
從tensorboard的顯示的趨勢走向來看,模型是有效的,包括學習率的選取等。
而且,CNN比傳統的全連接神經網絡的準確度高3%。簡直是一次重大的突破。
作為對比,我們訓練一個異常模型,也就是某些參數設置不合理,導致模型無法收斂的。對比看模型參數的變化。
我們可以看到模型失效時,accuracy的精度在隨機跳動,不收斂,模型參數也沒有得到有效的更新。
本文只是簡單的演示TensorBoard的使用方法,大概介紹其原理和初步印象,如果要深入研究,還有很多可以研究的點,總之,有了TensorBoard可以幫我更加直觀的看清模型結構,判斷模型訓練參數是否有效,并進行可視化展示。
總結
以上是生活随笔為你收集整理的TensorFlow2快速模型构建及tensorboard初体验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tensorboard : 无法将“te
- 下一篇: tensorflow 1.X迁移至ten