এমএল কমিউনিটি দিবস 9 নভেম্বর! TensorFlow, Jax থেকে আপডেটের জন্য আমাদের সাথে যোগ দিন, এবং আরও আরও জানুন

এইচপিরামস ড্যাশবোর্ডের সাথে হাইপারপ্যারমিটার টিউনিং

টেনসরফ্লো.আর.জে দেখুন গুগল কোলাবে চালান গিটহাবের উত্স দেখুন নোটবুক ডাউনলোড করুন

মেশিন লার্নিং মডেলগুলি তৈরি করার সময়, আপনাকে বিভিন্ন হাইপারপ্যারামিটারগুলি বেছে নেওয়া দরকার, যেমন একটি স্তরে ড্রপআউট হার বা শেখার হার। এই সিদ্ধান্তগুলি নির্ভুলতার মতো মডেল মেট্রিকগুলিকে প্রভাবিত করে। অতএব, মেশিন লার্নিংয়ের কার্যপ্রবাহের একটি গুরুত্বপূর্ণ পদক্ষেপ হ'ল আপনার সমস্যার জন্য সর্বোত্তম হাইপারপ্যারামিটারগুলি সনাক্ত করা, যার মধ্যে প্রায়শই পরীক্ষামূলকভাবে জড়িত। এই প্রক্রিয়াটি "হাইপারপ্যারমিটার অপটিমাইজেশন" বা "হাইপারপ্যারমিটার টিউনিং" নামে পরিচিত।

টেনসরবোর্ডে এইচপ্যারাম ড্যাশবোর্ড সেরা পরীক্ষা বা হাইপারপ্যারামিটারগুলির সবচেয়ে আশাব্যঞ্জক সেট সনাক্ত করার এই প্রক্রিয়াটি সহায়তা করার জন্য বেশ কয়েকটি সরঞ্জাম সরবরাহ করে।

এই টিউটোরিয়ালটি নিম্নলিখিত পদক্ষেপগুলিতে মনোনিবেশ করবে:

  1. পরীক্ষার সেটআপ এবং এইচপ্যারামের সারাংশ
  2. অভিযোজক টেনসরফ্লো হাইপারপ্যারামিটার এবং মেট্রিকগুলিতে লগ করতে চালায়
  3. রান শুরু করুন এবং তাদের সকলকে একটি প্যারেন্ট ডিরেক্টরিতে লগ করুন
  4. টেনসরবোর্ডের এইচপ্যারামস ড্যাশবোর্ডে ফলাফলটি ভিজ্যুয়ালাইজ করুন

টিএফ 2.0 ইনস্টল করে এবং টেনসরবোর্ড নোটবুক এক্সটেনশন লোড করে শুরু করুন:

# Load the TensorBoard notebook extension
%load_ext tensorboard
# Clear any logs from previous runs
rm -rf ./logs/

টেনসরফ্লো এবং টেনসরবোর্ড এইচপ্যারাম প্লাগইন আমদানি করুন:

import tensorflow as tf
from tensorboard.plugins.hparams import api as hp

ফ্যাশনএমএনআইএসটি ডেটাসেটটি ডাউনলোড করুন এবং এটি স্কেল করুন:

fashion_mnist = tf.keras.datasets.fashion_mnist

(x_train, y_train),(x_test, y_test) = fashion_mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz
32768/29515 [=================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz
26427392/26421880 [==============================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz
8192/5148 [===============================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz
4423680/4422102 [==============================] - 0s 0us/step

1. পরীক্ষা-নিরীক্ষা এবং এইচপ্যারাম পরীক্ষার সারসংক্ষেপ

মডেলটিতে তিনটি হাইপারপ্যারামিটার সহ পরীক্ষা:

  1. প্রথম ঘন স্তরতে ইউনিটগুলির সংখ্যা
  2. ড্রপআউট স্তরে ড্রপআউট হার
  3. অপ্টিমাইজার

চেষ্টা করার জন্য মানগুলি তালিকাভুক্ত করুন, এবং টেনসরবোর্ডে একটি পরীক্ষামূলক কনফিগারেশন লগ করুন। এই পদক্ষেপটি alচ্ছিক: আপনি ইউআইতে হাইপারপ্যারামিটারগুলির আরও সুনির্দিষ্ট ফিল্টারিং সক্ষম করতে ডোমেনের তথ্য সরবরাহ করতে পারেন এবং কোন মেট্রিকটি প্রদর্শিত হবে তা আপনি নির্দিষ্ট করতে পারেন।

HP_NUM_UNITS = hp.HParam('num_units', hp.Discrete([16, 32]))
HP_DROPOUT = hp.HParam('dropout', hp.RealInterval(0.1, 0.2))
HP_OPTIMIZER = hp.HParam('optimizer', hp.Discrete(['adam', 'sgd']))

METRIC_ACCURACY = 'accuracy'

with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
  hp.hparams_config(
    hparams=[HP_NUM_UNITS, HP_DROPOUT, HP_OPTIMIZER],
    metrics=[hp.Metric(METRIC_ACCURACY, display_name='Accuracy')],
  )

যদি আপনি এই পদক্ষেপটি এড়িয়ে যেতে চান, আপনি যেখানেই অন্যথায় HParam মানটি ব্যবহার করবেন না কেন আপনি স্ট্রিং আক্ষরিক ব্যবহার করতে পারেন: উদাহরণস্বরূপ, hparams['dropout'] পরিবর্তে hparams['dropout'] hparams[HP_DROPOUT]

২. অ্যাডাপ্ট টেনসরফ্লো হাইপারপ্যারামিটার এবং মেট্রিকগুলিতে লগ করতে চালায়

মডেলটি বেশ সহজ হবে: তাদের মধ্যে একটি ড্রপআউট স্তর সহ দুটি ঘন স্তর। প্রশিক্ষণ কোডটি পরিচিত দেখাবে, যদিও হাইপারপ্যারামিটারগুলি এখন আর হার্ডকোডযুক্ত নয়। পরিবর্তে, হাইপারপ্যারামিটারগুলি একটি hparams অভিধানে সরবরাহ করা হয় এবং প্রশিক্ষণ ফাংশন জুড়ে ব্যবহৃত হয়:

def train_test_model(hparams):
  model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(hparams[HP_NUM_UNITS], activation=tf.nn.relu),
    tf.keras.layers.Dropout(hparams[HP_DROPOUT]),
    tf.keras.layers.Dense(10, activation=tf.nn.softmax),
  ])
  model.compile(
      optimizer=hparams[HP_OPTIMIZER],
      loss='sparse_categorical_crossentropy',
      metrics=['accuracy'],
  )

  model.fit(x_train, y_train, epochs=1) # Run with 1 epoch to speed things up for demo purposes
  _, accuracy = model.evaluate(x_test, y_test)
  return accuracy

প্রতিটি রানের জন্য হাইপারপ্যারামিটার এবং চূড়ান্ত নির্ভুলতার সাথে একটি হাপারাম সংক্ষিপ্ত লগ করুন:

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 = train_test_model(hparams)
    tf.summary.scalar(METRIC_ACCURACY, accuracy, step=1)

কেরাস মডেলগুলি প্রশিক্ষণ দেওয়ার সময় আপনি এগুলি সরাসরি লেখার পরিবর্তে কলব্যাকগুলি ব্যবহার করতে পারেন:

model.fit(
    ...,
    callbacks=[
        tf.keras.callbacks.TensorBoard(logdir),  # log metrics
        hp.KerasCallback(logdir, hparams),  # log hparams
    ],
)

৩. রান শুরু করুন এবং তাদের সকলকে একটি প্যারেন্ট ডিরেক্টরিতে লগ করুন

আপনি এখন একাধিক পরীক্ষা-নিরীক্ষা চেষ্টা করতে পারেন, প্রতিটি হাইপারপ্যারামিটারের একটি আলাদা সেট দিয়ে প্রশিক্ষণ দিন।

সরলতার জন্য, একটি গ্রিড অনুসন্ধান ব্যবহার করুন: বিচ্ছিন্ন পরামিতিগুলির সমস্ত সংমিশ্রণ এবং বাস্তব-মূল্যবান প্যারামিটারের কেবল নীচের এবং উপরের সীমানা চেষ্টা করুন try আরও জটিল পরিস্থিতিতে, প্রতিটি হাইপারপ্যারমিটার মান এলোমেলোভাবে বেছে নেওয়া আরও কার্যকর হতে পারে (এটিকে এলোমেলো অনুসন্ধান বলা হয়) search আরও উন্নত পদ্ধতি ব্যবহার করা যেতে পারে।

কয়েকটি পরীক্ষা চালান, যা কয়েক মিনিট সময় নেয়:

session_num = 0

for 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:
      hparams = {
          HP_NUM_UNITS: num_units,
          HP_DROPOUT: dropout_rate,
          HP_OPTIMIZER: optimizer,
      }
      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
--- Starting trial: run-0
{'num_units': 16, 'dropout': 0.1, 'optimizer': 'adam'}
60000/60000 [==============================] - 4s 62us/sample - loss: 0.6872 - accuracy: 0.7564
10000/10000 [==============================] - 0s 35us/sample - loss: 0.4806 - accuracy: 0.8321
--- Starting trial: run-1
{'num_units': 16, 'dropout': 0.1, 'optimizer': 'sgd'}
60000/60000 [==============================] - 3s 54us/sample - loss: 0.9428 - accuracy: 0.6769
10000/10000 [==============================] - 0s 36us/sample - loss: 0.6519 - accuracy: 0.7770
--- Starting trial: run-2
{'num_units': 16, 'dropout': 0.2, 'optimizer': 'adam'}
60000/60000 [==============================] - 4s 60us/sample - loss: 0.8158 - accuracy: 0.7078
10000/10000 [==============================] - 0s 36us/sample - loss: 0.5309 - accuracy: 0.8154
--- Starting trial: run-3
{'num_units': 16, 'dropout': 0.2, 'optimizer': 'sgd'}
60000/60000 [==============================] - 3s 50us/sample - loss: 1.1465 - accuracy: 0.6019
10000/10000 [==============================] - 0s 36us/sample - loss: 0.7007 - accuracy: 0.7683
--- Starting trial: run-4
{'num_units': 32, 'dropout': 0.1, 'optimizer': 'adam'}
60000/60000 [==============================] - 4s 65us/sample - loss: 0.6178 - accuracy: 0.7849
10000/10000 [==============================] - 0s 38us/sample - loss: 0.4645 - accuracy: 0.8395
--- Starting trial: run-5
{'num_units': 32, 'dropout': 0.1, 'optimizer': 'sgd'}
60000/60000 [==============================] - 3s 55us/sample - loss: 0.8989 - accuracy: 0.6896
10000/10000 [==============================] - 0s 37us/sample - loss: 0.6335 - accuracy: 0.7853
--- Starting trial: run-6
{'num_units': 32, 'dropout': 0.2, 'optimizer': 'adam'}
60000/60000 [==============================] - 4s 64us/sample - loss: 0.6404 - accuracy: 0.7782
10000/10000 [==============================] - 0s 37us/sample - loss: 0.4802 - accuracy: 0.8265
--- Starting trial: run-7
{'num_units': 32, 'dropout': 0.2, 'optimizer': 'sgd'}
60000/60000 [==============================] - 3s 54us/sample - loss: 0.9633 - accuracy: 0.6703
10000/10000 [==============================] - 0s 36us/sample - loss: 0.6516 - accuracy: 0.7755

৪. টেনসরবোর্ডের এইচপ্যারাম প্লাগইনে ফলাফলটি ভিজ্যুয়ালাইজ করুন

এইচপ্যারাম ড্যাশবোর্ড এখন খোলা যেতে পারে। টেনসরবোর্ড শুরু করুন এবং শীর্ষে "এইচপ্যারামস" এ ক্লিক করুন।

%tensorboard --logdir logs/hparam_tuning

ড্যাশবোর্ডের বাম ফলকটি ফিল্টারিং ক্ষমতাগুলি সরবরাহ করে যা এইচপ্যারামস ড্যাশবোর্ডের সমস্ত দর্শন জুড়ে সক্রিয় রয়েছে:

  • কোন হাইপারপ্যারামিটার / মেট্রিকগুলি ড্যাশবোর্ডে প্রদর্শিত হয় তা ফিল্টার করুন
  • কোন হাইপারপ্যারমিটার / মেট্রিক মানগুলি ড্যাশবোর্ডে প্রদর্শিত হয় তা ফিল্টার করুন
  • রান স্থিতিতে ফিল্টার (চলমান, সাফল্য, ...)
  • টেবিল দৃশ্যে হাইপারপাটারমিটার / মেট্রিক অনুসারে বাছাই করুন
  • প্রদর্শন করার জন্য সেশন গ্রুপের সংখ্যা (যখন অনেক পরীক্ষা-নিরীক্ষা হয় তখন পারফরম্যান্সের জন্য দরকারী)

এইচপ্যারামস ড্যাশবোর্ডটিতে বিভিন্ন দরকারী তথ্য সহ তিনটি ভিন্ন মতামত রয়েছে:

  • সারণী দর্শন রান, তাদের হাইপারপ্যারামিটার এবং তাদের মেট্রিকগুলি তালিকাভুক্ত করে।
  • প্যারালাল কোঅর্ডিনেটস ভিউ প্রতিটি রানাকে প্রতিটি হাইপারপ্যারমিটার এবং মেট্রিকের অক্ষের মধ্য দিয়ে যাওয়া লাইন হিসাবে দেখায়। কোনও অঞ্চলকে চিহ্নিত করতে মাউসকে ক্লিক করুন এবং টেনে আনুন যেটি কেবল সেই অঞ্চলগুলিকেই সঞ্চালিত করবে যা এটির মধ্য দিয়ে যায়। হাইপারপ্যারামিটারগুলির কোন গ্রুপগুলি সবচেয়ে গুরুত্বপূর্ণ তা সনাক্ত করার জন্য এটি কার্যকর হতে পারে। অক্ষগুলি এগুলিকে টেনে নিয়ে পুনরায় অর্ডার করা যায়।
  • স্ক্যাটার প্লট ভিউ প্রতিটি হাইপারপ্রেমিটার / মেট্রিককে প্রতিটি মেট্রিকের সাথে তুলনা করে প্লট দেখায়। এটি পারস্পরিক সম্পর্ক চিহ্নিত করতে সহায়তা করতে পারে। একটি নির্দিষ্ট প্লটের একটি অঞ্চল নির্বাচন করতে ক্লিক করুন এবং টেনে আনুন এবং অন্যান্য প্লট জুড়ে সেই সেশনগুলি হাইলাইট করুন।

একটি সারণী সারি, একটি সমান্তরাল স্থানাঙ্ক লাইন, এবং একটি স্কেটার প্লট মার্কেট মেট্রিক্সের একটি প্লটকে সেই সেশনের প্রশিক্ষণ পদক্ষেপগুলির ফাংশন হিসাবে দেখতে ক্লিক করা যেতে পারে (যদিও এই টিউটোরিয়ালে প্রতিটি রানের জন্য কেবল একটি পদক্ষেপ ব্যবহৃত হয়)।

HParams ড্যাশবোর্ডের ক্ষমতাগুলি আরও সন্ধান করতে, আরও পরীক্ষা-নিরীক্ষা করে প্রিজেনেটেড লগগুলির একটি সেট ডাউনলোড করুন:

wget -q 'https://storage.googleapis.com/download.tensorflow.org/tensorboard/hparams_demo_logs.zip'
unzip -q hparams_demo_logs.zip -d logs/hparam_demo

টেনসরবোর্ডে এই লগগুলি দেখুন:

%tensorboard --logdir logs/hparam_demo

আপনি এইচপিরামস ড্যাশবোর্ডে বিভিন্ন দর্শন ব্যবহার করে দেখতে পারেন।

উদাহরণস্বরূপ, সমান্তরাল স্থানাঙ্ক দর্শনে গিয়ে এবং নির্ভুলতার অক্ষটি ক্লিক করে এবং টেনে নিয়ে আপনি সর্বোচ্চ নির্ভুলতার সাথে রানগুলি নির্বাচন করতে পারেন। এই রানগুলি অপ্টিমাইজার অক্ষে 'অ্যাডাম' এর মধ্য দিয়ে যাওয়ার পরে আপনি এই সিদ্ধান্তে পৌঁছতে পারবেন যে 'অ্যাডাম' এই পরীক্ষাগুলিতে 'এসএজিডি' এর চেয়ে আরও ভাল অভিনয় করেছে performed