欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用TensorBoard進行超參數優(yōu)化的實現

 更新時間:2020年07月06日 09:50:06   作者:https://blog.csdn.net/m0_46510245/article/details/107119610  
這篇文章主要介紹了使用TensorBoard進行超參數優(yōu)化的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在本文中,我們將介紹超參數優(yōu)化,然后使用TensorBoard顯示超參數優(yōu)化的結果。

深度神經網絡的超參數是什么?

深度學習神經網絡的目標是找到節(jié)點的權重,這將幫助我們理解圖像、文本或語音中的數據模式。

要做到這一點,可以使用為模型提供最佳準度和精度的值來設計神經網絡參數。

那么,這些被稱為超參數的參數是什么呢?

用于訓練神經網絡模型的不同參數稱為超參數。這些超參數像旋鈕一樣被調優(yōu),以提高神經網絡的性能,從而產生一個優(yōu)化的模型。超參數的一個通俗的解釋是:用來優(yōu)化參數的參數。

神經網絡中的一些超參數是:

1.隱藏層的數量
2.隱含層中單位或節(jié)點的集合的數量
3.學習速率
4.DropOut比例
5.迭代次數
6.優(yōu)化器的選擇如SGD, Adam, AdaGrad, Rmsprop等
7.激活函數選擇如ReLU, sigmoid, leaky ReLU等
8.批次大小

如何實現超參數優(yōu)化?

超參數優(yōu)化是尋找深度學習算法的優(yōu)化器、學習率、等超參數值,從而獲得最佳模型性能的過程。

可以使用以下技術執(zhí)行超參數優(yōu)化。

  • 手動搜索
  • 網格搜索:對指定超參數的所有可能組合進行窮舉搜索,從而得到笛卡爾積。
  • 隨機搜索:超參數是隨機選擇的,不是每一個超參數的組合都被嘗試。隨著超參數數量的增加,隨機搜索是一個更好的選擇,因為它可以更快地得到超參數的良好組合。
  • 貝葉斯優(yōu)化:整合關于超參數的先驗數據,包括模型的準確性或損失。先驗信息有助于確定模型超參數選擇的更好近似。

為了在TensorBoard中可視化模型的超參數并進行調優(yōu),我們將使用網格搜索技術,其中我們將使用一些超參數,如不同的節(jié)點數量,不同的優(yōu)化器,或學習率等看看模型的準確性和損失。

為什么使用TensorBoard進行超參數優(yōu)化?

一幅圖片勝過千言萬語,這也適用于復雜的深度學習模型。深度學習模型被認為是一個黑盒子,你發(fā)送一些輸入數據,模型做一些復雜的計算,輸出結果。

TensorBoard是Tensorflow的一個可視化工具包,用于顯示不同的指標、參數和其他可視化,幫助調試、跟蹤、微調、優(yōu)化和共享深度學習實驗結果

TensorBoard可以跟蹤模型在每個訓練迭代的精度和損失;

還有不同的超參數值。不同超參數值的跟蹤精度將幫助您更快地微調模型。

我們將使用貓和狗數據集使用TensorBoard可視化標量、圖形和分布。

https://www.kaggle.com/c/dogs-vs-cats/data

導入所需的庫

導入TensorFlow和TensorBoard HParams插件以及Keras庫來預處理圖像和創(chuàng)建模型。

import tensorflow as tf
from tensorboard.plugins.hparams import api as hp
import datetime
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator, img_to_array, load_img
import numpy as np

加載TensorBoard notebook擴展

# Load the TensorBoard notebook extension
%load_ext tensorboard

創(chuàng)建圖像分類的深度學習模型

為訓練設置關鍵參數

BASE_PATH = 'Data\\dogs-vs-cats\\train\\'
TRAIN_PATH='Data\\dogs-vs-cats\\train_data\\'
VAL_PATH='Data\\dogs-vs-cats\\validation_data\\'batch_size = 32 
epochs = 5
IMG_HEIGHT = 150
IMG_WIDTH = 150

對訓練圖像進行縮放和不同的增強

train_image_generator = ImageDataGenerator(                        
rescale=1./255,
rotation_range=45, 
width_shift_range=.15,
height_shift_range=.15,
horizontal_flip=True,
zoom_range=0.3)

重新調節(jié)驗證數據

validation_image_generator = ImageDataGenerator(rescale=1./255)

為訓練和驗證生成成批的規(guī)范化數據

train_data_gen = train_image_generator.flow_from_directory(
batch_size = batch_size,           
directory=TRAIN_PATH,
shuffle=True,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='categorical')
val_data_gen = validation_image_generator.flow_from_directory(batch_size = batch_size,
directory=VAL_PATH,
target_size=(IMG_HEIGHT, IMG_WIDTH), 
class_mode='categorical')

為網格搜索(Grid Search)設置超參數

我們通過列出超參數的不同值或取值范圍,使用了四個超參數來運行我們的實驗。

對于離散超參數,將嘗試所有可能的參數組合,對于實值參數,只使用下界和上界。

第一層的單元數量:256和512

dropout比例:范圍在0.1到0.2之間。所以dropout比例是0。1和0。2。

優(yōu)化器:adam, SGD, rmsprop

優(yōu)化器的學習率:0.001,0.0001和0.0005,

我們還將準確率顯示在TensorBoard 上

## Create hyperparameters
HP_NUM_UNITS=hp.HParam('num_units', hp.Discrete([ 256, 512]))
HP_DROPOUT=hp.HParam('dropout', hp.RealInterval(0.1, 0.2))
HP_LEARNING_RATE= hp.HParam('learning_rate', hp.Discrete([0.001, 0.0005, 0.0001]))
HP_OPTIMIZER=hp.HParam('optimizer', hp.Discrete(['adam', 'sgd', 'rmsprop']))METRIC_ACCURACY='accuracy'

創(chuàng)建和配置日志文件

log_dir ='\\logs\\fit\\' + datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
with tf.summary.create_file_writer(log_dir).as_default():
  hp.hparams_config(
  hparams=
  [HP_NUM_UNITS, HP_DROPOUT, HP_OPTIMIZER, HP_LEARNING_RATE],
  metrics=[hp.Metric(METRIC_ACCURACY, display_name='Accuracy')],
  )

創(chuàng)建、編譯和訓練模型

超參數不是硬編碼的,但從hparams字典為不同的參數:HP_DROPOUT , HP_NUM_UNITS ,HP_OPTIMIZER ,HP_LEARNING_RATE。

函數返回最后一個批次的驗證準確性。

def create_model(hparams):
  model = Sequential([
  Conv2D(64, 3, padding='same', activation='relu', 
      input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
  MaxPooling2D(),
  #setting the Drop out value based on HParam
  Dropout(hparams[HP_DROPOUT]),
  Conv2D(128, 3, padding='same', activation='relu'),
  MaxPooling2D(),
  Dropout(hparams[HP_DROPOUT]),
  Flatten(),
  Dense(hparams[HP_NUM_UNITS], activation='relu'),
  Dense(2, activation='softmax')])
  
  #setting the optimizer and learning rate
  optimizer = hparams[HP_OPTIMIZER]
  learning_rate = hparams[HP_LEARNING_RATE]
  if optimizer == "adam":
    optimizer = tf.optimizers.Adam(learning_rate=learning_rate)
  elif optimizer == "sgd":
    optimizer = tf.optimizers.SGD(learning_rate=learning_rate)
  elif optimizer=='rmsprop':
    optimizer = tf.optimizers.RMSprop(learning_rate=learning_rate)
  else:
    raise ValueError("unexpected optimizer name: %r" % (optimizer_name,))
  
  # Comiple the mode with the optimizer and learninf rate specified in hparams
  model.compile(optimizer=optimizer,
       loss='categorical_crossentropy',
       metrics=['accuracy'])
  
  #Fit the model 
  history=model.fit_generator(
  train_data_gen,
  steps_per_epoch=1000,
  epochs=epochs,
  validation_data=val_data_gen,
  validation_steps=1000,
  callbacks=[
    tf.keras.callbacks.TensorBoard(log_dir), # log metrics
    hp.KerasCallback(log_dir, hparams),# log hparams
    
  ])
  return history.history['val_accuracy'][-1]

對于模型的每次運行,使用超參數和最終批次精度記錄hparams都會被紀律。我們需要將最后一個批次的驗證精度轉換為標量值。

def run(run_dir, hparams):
 with tf.summary.create_file_writer(run_dir).as_default():
  hp.hparams(hparams) # record the values used in this trial
  accuracy = create_model(hparams)
  #converting to tf scalar
  accuracy= tf.reshape(tf.convert_to_tensor(accuracy), []).numpy()
  tf.summary.scalar(METRIC_ACCURACY, accuracy, step=1)

用不同的超參數值運行模型

這里的實驗使用網格搜索,并測試第一層單元數的所有可能的超參數組合,Dropout比例、優(yōu)化器及其學習率,以及準確度用于準確性。

session_num = 0for num_units in HP_NUM_UNITS.domain.values:
 for dropout_rate in (HP_DROPOUT.domain.min_value, HP_DROPOUT.domain.max_value):
  for optimizer in HP_OPTIMIZER.domain.values:
    for learning_rate in HP_LEARNING_RATE.domain.values:
     hparams = {
       HP_NUM_UNITS: num_units,
       HP_DROPOUT: dropout_rate,
       HP_OPTIMIZER: optimizer,
       HP_LEARNING_RATE: learning_rate,
     }
     run_name = "run-%d" % session_num
     print('--- Starting trial: %s' % run_name)
     print({h.name: hparams[h] for h in hparams})
     run('logs/hparam_tuning/' + run_name, hparams)
     session_num += 1

在HParams中可視化結果

python -m tensorboard.main --logdir="logs/hparam_tuning"

當按精度降序排序時,可以看到最優(yōu)化的模型是256臺,dropout比例為0.2,rmsprop優(yōu)化器學習率為0.0005。

在jupyter notebook中可以使用以下命令查看

%tensorboard --logdir='\logs\hparam_tuning'

在Tensorboard中使用Parallel Coordinates視圖,顯示每個超參數的單獨運行情況并顯示精度,查找最優(yōu)化的超參數,以獲得最佳的模型精度

總結

Tensorboard為超參數調優(yōu)提供了一種可視化的方式來了解哪些超參數可以用于微調深度學習模型以獲得最佳精度,更多的操作可以查看官方文檔:

https://www.tensorflow.org/tensorboard/hyperparameter_tuning_with_hparams

作者:Renu Khandelwal

deephub翻譯組

到此這篇關于使用TensorBoard進行超參數優(yōu)化的實現的文章就介紹到這了,更多相關TensorBoard 超參數優(yōu)化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python連續(xù)賦值需要注意的一些問題

    Python連續(xù)賦值需要注意的一些問題

    這篇文章主要介紹了Python連續(xù)賦值需要注意的一些問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Pandas自定義選項option設置

    Pandas自定義選項option設置

    pandas有一個option系統(tǒng)可以控制pandas的展示情況,一般來說我們不需要進行修改,但是不排除特殊情況下的修改需求。本文將會詳細講解pandas中的option設置,感興趣的可以了解下
    2021-07-07
  • Python reversed函數及使用方法解析

    Python reversed函數及使用方法解析

    這篇文章主要介紹了Python reversed函數及使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • pycharm中django框架連接mysql數據庫的方法

    pycharm中django框架連接mysql數據庫的方法

    這篇文章主要介紹了pycharm中django框架連接mysql數據庫的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 詳解django中Template語言

    詳解django中Template語言

    Django是一個開放源代碼的Web應用框架,由Python寫成。這篇文章給大家介紹django中Template語言,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-02-02
  • 教你如何在pycharm中使用less

    教你如何在pycharm中使用less

    這篇文章主要介紹了如何在pycharm中使用less,操作步驟真的很簡單,本文通過圖文并茂的形式給大家詳細介紹,需要的朋友可以參考下
    2021-10-10
  • python免殺技術shellcode的加載與執(zhí)行

    python免殺技術shellcode的加載與執(zhí)行

    本文主要介紹了python免殺技術shellcode的加載與執(zhí)行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • python3基于TCP實現CS架構文件傳輸

    python3基于TCP實現CS架構文件傳輸

    這篇文章主要為大家詳細介紹了python3基于TCP實現CS架構文件傳輸,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python有參函數使用代碼實例

    Python有參函數使用代碼實例

    這篇文章主要介紹了Python有參函數使用代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • python中使用pyhook實現鍵盤監(jiān)控的例子

    python中使用pyhook實現鍵盤監(jiān)控的例子

    這篇文章主要介紹了python中使用pyhook實現鍵盤監(jiān)控的例子,包含pyhook的下載地址和手冊地址及一個Windows下的監(jiān)控實例,需要的朋友可以參考下
    2014-07-07

最新評論