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

使用TensorBoard進行超參數(shù)優(yōu)化的實現(xiàn)

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

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

深度神經(jīng)網(wǎng)絡(luò)的超參數(shù)是什么?

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的目標(biāo)是找到節(jié)點的權(quán)重,這將幫助我們理解圖像、文本或語音中的數(shù)據(jù)模式。

要做到這一點,可以使用為模型提供最佳準(zhǔn)度和精度的值來設(shè)計神經(jīng)網(wǎng)絡(luò)參數(shù)。

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

用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的不同參數(shù)稱為超參數(shù)。這些超參數(shù)像旋鈕一樣被調(diào)優(yōu),以提高神經(jīng)網(wǎng)絡(luò)的性能,從而產(chǎn)生一個優(yōu)化的模型。超參數(shù)的一個通俗的解釋是:用來優(yōu)化參數(shù)的參數(shù)。

神經(jīng)網(wǎng)絡(luò)中的一些超參數(shù)是:

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

如何實現(xiàn)超參數(shù)優(yōu)化?

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

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

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

為了在TensorBoard中可視化模型的超參數(shù)并進行調(diào)優(yōu),我們將使用網(wǎng)格搜索技術(shù),其中我們將使用一些超參數(shù),如不同的節(jié)點數(shù)量,不同的優(yōu)化器,或?qū)W習(xí)率等看看模型的準(zhǔn)確性和損失。

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

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

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

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

還有不同的超參數(shù)值。不同超參數(shù)值的跟蹤精度將幫助您更快地微調(diào)模型。

我們將使用貓和狗數(shù)據(jù)集使用TensorBoard可視化標(biāo)量、圖形和分布。

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

導(dǎo)入所需的庫

導(dǎo)入TensorFlow和TensorBoard HParams插件以及Keras庫來預(yù)處理圖像和創(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)建圖像分類的深度學(xué)習(xí)模型

為訓(xùn)練設(shè)置關(guān)鍵參數(shù)

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

對訓(xùn)練圖像進行縮放和不同的增強

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)

重新調(diào)節(jié)驗證數(shù)據(jù)

validation_image_generator = ImageDataGenerator(rescale=1./255)

為訓(xùn)練和驗證生成成批的規(guī)范化數(shù)據(jù)

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')

為網(wǎng)格搜索(Grid Search)設(shè)置超參數(shù)

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

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

第一層的單元數(shù)量:256和512

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

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

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

我們還將準(zhǔn)確率顯示在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)建、編譯和訓(xùn)練模型

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

函數(shù)返回最后一個批次的驗證準(zhǔn)確性。

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]

對于模型的每次運行,使用超參數(shù)和最終批次精度記錄hparams都會被紀(jì)律。我們需要將最后一個批次的驗證精度轉(zhuǎn)換為標(biāo)量值。

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)

用不同的超參數(shù)值運行模型

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

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中可視化結(jié)果

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

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

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

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

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

總結(jié)

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

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

作者:Renu Khandelwal

deephub翻譯組

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

相關(guān)文章

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

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

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

    Pandas自定義選項option設(shè)置

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

    Python reversed函數(shù)及使用方法解析

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

    pycharm中django框架連接mysql數(shù)據(jù)庫的方法

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

    詳解django中Template語言

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

    教你如何在pycharm中使用less

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

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

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

    python3基于TCP實現(xiàn)CS架構(gòu)文件傳輸

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

    Python有參函數(shù)使用代碼實例

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

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

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

最新評論