TensorBoardを用いた超パラメータ最適化の実現
9141 ワード
本論文では,超パラメータ最適化を紹介し,次にTensorBoardを用いて超パラメータ最適化の結果を示す。
深度神経ネットワークの超パラメータは何ですか?
神経ネットワークの深さ学習の目的は、画像、テキスト、または音声中のデータモードの理解を助けるノードの重みを見つけることである。
このようにするためには、ニューラルネットワークパラメータを設計するためにモデルに最適な精度と精度の値を提供することができる。
これらの超パラメータと呼ばれるパラメータは何ですか?
神経ネットワークモデルを訓練するための異なるパラメータを超パラメータと呼ぶ。これらの超パラメータはノブのように調整されて,神経ネットワークの性能を向上させ,従って最適化モデルを生成する。超パラメータの分かりやすい説明は,パラメータを最適化するためのパラメータである。
神経ネットワークにおけるいくつかの超パラメータは、
1.隠れ層の数
2.暗黙層における単位またはノードの集合の数
3.学習スピード
4.DropOut比率
5.反復回数
6.最適化器の選択はSGD、Adam、AdaGrand、Rmspropなどです。
7.活性化関数の選択はReLU、sigmoid、leaky ReLUなどです。
8.ロットサイズ
どのように超パラメータ最適化を実現しますか?
超パラメータ最適化は深さ学習アルゴリズムの最適化器、学習率、等の超パラメータ値を探して最適なモデル性能を得るプロセスである。
以下の技術を使って超パラメータ最適化が可能です。手動検索 メッシュ検索:指定された超パラメータのすべての可能な組み合わせをクリッピングして、デカルト積を得る。 ランダム検索:スーパーパラメータはランダムに選択され、各スーパーパラメータの組み合わせが試みられていません。超パラメータ数が増加するにつれてランダム検索はより良い選択であり、それはより速く超パラメータの良い組み合わせを得ることができるからである。 バイヤス最適化:モデルの精度や損失を含むメタパラメータに関する先行データを統合する。事前情報は,モデルの超パラメータ選択のより良い近似を決定するのに役立つ。
TensorBoardでモデルの超パラメータを可視化して調整するために,メッシュサーチ技術を用いて,異なるノード数,異なる最適化器,または学習率などのいくつかの超パラメータを用いてモデルの精度と損失を見ていく。
なぜTensorBoardを使って超パラメータ最適化をするのですか?
一枚の絵は千万語にも勝る。これは複雑な深さ学習モデルにも適用される。深さ学習モデルはブラックボックスと考えられています。いくつかの入力データを送ります。モデルは複雑な計算をして、結果を出力します。
TensorBoardはTensorflowの可視化ツールバッグであり、異なる指標、パラメータ、その他の可視化を表示するために使用され、調整、追跡、微調整、最適化、深さ学習の実験結果を共有するのを助けます。
TensorBoardは、各トレーニング反復におけるモデルの精度と損失を追跡することができる。
また、異なる超パラメータ値があります。超参数の追跡精度が異なると、より速くモデルを微調整することができます。
猫と犬のデータセットを使って、TensorBoardを使ってスカラー、図形、分布を可視化します。
https://www.kaggle.com/c/dogs-vs-cats/data
必要なライブラリをインポートします
TensorFlowとTensorBoard HParamsプラグインとKerasライブラリを導入して画像を前処理してモデルを作成します。
トレーニングのためのキーパラメータを設定します。
超パラメータの異なる値または取得範囲を列記することにより,4つの超パラメータを用いて実験を実行した。
離散超パラメータについては,実数パラメータに対して下界と上界のみを用いて,可能なすべてのパラメータの組み合わせを試みる。
第1層のユニット数:256と512
dropout比:0.1から0.2までの範囲です。したがって、dropoutの比率は0です。1と0です。2です。
最適化器:adam、SGD、rmsprop
最適化器の学習率:0.001,0.0001及び0.0005、
私たちはまた、精度をTensorBoardに表示します。
超パラメータはハードコードではありませんが、hparams辞書からは異なるパラメータです。DROUT,HP_NUM_UNTS,HP_OPTTIMIZER,HP_LEARNING_RATE
関数は最後のロットの検証精度を返します。
ここでの実験はメッシュ検索を用いて、第一層のセル数の可能なすべての超パラメータ組み合わせを試験し、Dropout比、最適化器及びその学習率、精度を正確にする。
jupyter notebookでは以下のコマンドを使って確認できます。
TensorboardではParalel Coordinatesビューを使用して、各スーパーパラメータの単独運転状況を表示し、精度を表示し、最適化された超パラメータを探して、最適なモデル精度を得る。
締め括りをつける
Tensorboardは、超パラメータの調整に最適な精度を得るために、どの超パラメータが微調整深さ学習モデルに使用できるかを視覚化する方法を提供しています。
https://www.tensorflow.org/tensorboard/hyperparameter_チューニング.with_hparams
Renu Khandel wal
deephb翻訳グループ
ここでは、TensorBoardを使用した超パラメータ最適化の実現に関する記事を紹介します。これに関連して、TensorBoardの超パラメータ最適化の内容を紹介します。以前の記事を検索してください。または、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。
深度神経ネットワークの超パラメータは何ですか?
神経ネットワークの深さ学習の目的は、画像、テキスト、または音声中のデータモードの理解を助けるノードの重みを見つけることである。
このようにするためには、ニューラルネットワークパラメータを設計するためにモデルに最適な精度と精度の値を提供することができる。
これらの超パラメータと呼ばれるパラメータは何ですか?
神経ネットワークモデルを訓練するための異なるパラメータを超パラメータと呼ぶ。これらの超パラメータはノブのように調整されて,神経ネットワークの性能を向上させ,従って最適化モデルを生成する。超パラメータの分かりやすい説明は,パラメータを最適化するためのパラメータである。
神経ネットワークにおけるいくつかの超パラメータは、
1.隠れ層の数
2.暗黙層における単位またはノードの集合の数
3.学習スピード
4.DropOut比率
5.反復回数
6.最適化器の選択はSGD、Adam、AdaGrand、Rmspropなどです。
7.活性化関数の選択はReLU、sigmoid、leaky ReLUなどです。
8.ロットサイズ
どのように超パラメータ最適化を実現しますか?
超パラメータ最適化は深さ学習アルゴリズムの最適化器、学習率、等の超パラメータ値を探して最適なモデル性能を得るプロセスである。
以下の技術を使って超パラメータ最適化が可能です。
なぜTensorBoardを使って超パラメータ最適化をするのですか?
一枚の絵は千万語にも勝る。これは複雑な深さ学習モデルにも適用される。深さ学習モデルはブラックボックスと考えられています。いくつかの入力データを送ります。モデルは複雑な計算をして、結果を出力します。
TensorBoardはTensorflowの可視化ツールバッグであり、異なる指標、パラメータ、その他の可視化を表示するために使用され、調整、追跡、微調整、最適化、深さ学習の実験結果を共有するのを助けます。
TensorBoardは、各トレーニング反復におけるモデルの精度と損失を追跡することができる。
また、異なる超パラメータ値があります。超参数の追跡精度が異なると、より速くモデルを微調整することができます。
猫と犬のデータセットを使って、TensorBoardを使ってスカラー、図形、分布を可視化します。
https://www.kaggle.com/c/dogs-vs-cats/data
必要なライブラリをインポートします
TensorFlowとTensorBoard HParamsプラグインとKerasライブラリを導入して画像を前処理してモデルを作成します。
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
画像分類の深さ学習モデルを作成します。トレーニングのためのキーパラメータを設定します。
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)
検証データの再調整
validation_image_generator = ImageDataGenerator(rescale=1./255)
訓練と検証のためにバッチの正規化データを生成する
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)のための超パラメータを設定します。超パラメータの異なる値または取得範囲を列記することにより,4つの超パラメータを用いて実験を実行した。
離散超パラメータについては,実数パラメータに対して下界と上界のみを用いて,可能なすべてのパラメータの組み合わせを試みる。
第1層のユニット数:256と512
dropout比:0.1から0.2までの範囲です。したがって、dropoutの比率は0です。1と0です。2です。
最適化器:adam、SGD、rmsprop
最適化器の学習率: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'
ログファイルの作成と設定
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')],
)
作成、コンパイル、トレーニングモデル超パラメータはハードコードではありませんが、hparams辞書からは異なるパラメータです。DROUT,HP_NUM_UNTS,HP_OPTTIMIZER,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比、最適化器及びその学習率、精度を正確にする。
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"
精度の降順で並べ替えると、最適化されたモデルは256台、dropoutの比率は0.2で、rmsprop最適化器学習率は0.0005です。jupyter notebookでは以下のコマンドを使って確認できます。
%tensorboard --logdir='\logs\hparam_tuning'
TensorboardではParalel Coordinatesビューを使用して、各スーパーパラメータの単独運転状況を表示し、精度を表示し、最適化された超パラメータを探して、最適なモデル精度を得る。
締め括りをつける
Tensorboardは、超パラメータの調整に最適な精度を得るために、どの超パラメータが微調整深さ学習モデルに使用できるかを視覚化する方法を提供しています。
https://www.tensorflow.org/tensorboard/hyperparameter_チューニング.with_hparams
Renu Khandel wal
deephb翻訳グループ
ここでは、TensorBoardを使用した超パラメータ最適化の実現に関する記事を紹介します。これに関連して、TensorBoardの超パラメータ最適化の内容を紹介します。以前の記事を検索してください。または、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。