TensorBoard Scalars: লগিং প্রশিক্ষণ মেট্রিক্স কেরাসে

TensorFlow.org এ দেখুন Google Colab-এ চালান GitHub-এ উৎস দেখুন

ওভারভিউ

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

TensorBoard এর Scalars ড্যাশবোর্ড আপনাকে খুব সামান্য প্রচেষ্টার সঙ্গে একটি সহজ API ব্যবহার করে এই বৈশিষ্ট্যের মান ঠাহর করতে পারবেন। এই টিউটোরিয়ালটি আপনার কেরাস মডেল তৈরি করার সময় টেনসরবোর্ডের সাথে এই APIগুলি কীভাবে ব্যবহার করতে হয় তা শিখতে সাহায্য করার জন্য খুব প্রাথমিক উদাহরণ উপস্থাপন করে। আপনি শিখবেন কিভাবে কেরাস টেনসরবোর্ড কলব্যাক এবং টেনসরফ্লো সামারি এপিআই ব্যবহার করতে হয় ডিফল্ট এবং কাস্টম স্কেলারগুলি কল্পনা করতে।

সেটআপ

# Load the TensorBoard notebook extension.
%load_ext tensorboard
from datetime import datetime
from packaging import version

import tensorflow as tf
from tensorflow import keras

import numpy as np

print("TensorFlow version: ", tf.__version__)
assert version.parse(tf.__version__).release[0] >= 2, \
    "This notebook requires TensorFlow 2.0 or above."
TensorFlow version:  2.2

একটি সাধারণ রিগ্রেশনের জন্য ডেটা সেট আপ করুন

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

আপনি TensorBoard ব্যবহার করতে সময়কাল জুড়ে কিভাবে প্রশিক্ষণ ও পরীক্ষা ক্ষতি পরিবর্তন পালন করতে যাচ্ছেন। আশা করি, আপনি সময়ের সাথে প্রশিক্ষণ এবং পরীক্ষার ক্ষতি হ্রাস দেখতে পাবেন এবং তারপরে স্থির থাকবেন।

প্রথমত, মোটামুটিভাবে y অক্ষের = 0.5x +2 বরাবর 1000 ডাটা পয়েন্টের উৎপন্ন। এই ডেটা পয়েন্টগুলিকে প্রশিক্ষণ এবং পরীক্ষার সেটগুলিতে ভাগ করুন। আপনার আশা নিউরাল নেট এই সম্পর্ক শিখে.

data_size = 1000
# 80% of the data is for training.
train_pct = 0.8

train_size = int(data_size * train_pct)

# Create some input data between -1 and 1 and randomize it.
x = np.linspace(-1, 1, data_size)
np.random.shuffle(x)

# Generate the output data.
# y = 0.5x + 2 + noise
y = 0.5 * x + 2 + np.random.normal(0, 0.05, (data_size, ))

# Split into test and train pairs.
x_train, y_train = x[:train_size], y[:train_size]
x_test, y_test = x[train_size:], y[train_size:]

মডেল এবং লগিং ক্ষতি প্রশিক্ষণ

আপনি এখন আপনার মডেল সংজ্ঞায়িত, প্রশিক্ষণ এবং মূল্যায়ন করতে প্রস্তুত।

ক্ষতি স্কালে লগ ইন করতে হিসাবে আপনি প্রশিক্ষণ, আপনি নিচের কাজগুলো করব:

  1. Keras তৈরি করুন TensorBoard কলব্যাক
  2. একটি লগ ডিরেক্টরি উল্লেখ করুন
  3. Keras 'থেকে TensorBoard কলব্যাক পাশ Model.fit ()

TensorBoard লগ ডিরেক্টরি অনুক্রম থেকে লগ ডেটা পড়ে। এই নোটবুক, রুট লগ ডিরেক্টরি হয় logs/scalars , একটি timestamped সাব দ্বারা suffixed। টাইমস্ট্যাম্পড সাবডিরেক্টরি আপনাকে টেনসরবোর্ড ব্যবহার করার সাথে সাথে ট্রেনিং চালানোর সহজে সনাক্ত করতে এবং নির্বাচন করতে সক্ষম করে এবং আপনার মডেলে পুনরাবৃত্তি করে।

logdir = "logs/scalars/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model = keras.models.Sequential([
    keras.layers.Dense(16, input_dim=1),
    keras.layers.Dense(1),
])

model.compile(
    loss='mse', # keras.losses.mean_squared_error
    optimizer=keras.optimizers.SGD(learning_rate=0.2),
)

print("Training ... With default parameters, this takes less than 10 seconds.")
training_history = model.fit(
    x_train, # input
    y_train, # output
    batch_size=train_size,
    verbose=0, # Suppress chatty output; use Tensorboard instead
    epochs=100,
    validation_data=(x_test, y_test),
    callbacks=[tensorboard_callback],
)

print("Average test loss: ", np.average(training_history.history['loss']))
Training ... With default parameters, this takes less than 10 seconds.
Average test loss:  0.05271831926424056

টেনসরবোর্ড ব্যবহার করে ক্ষতি পরীক্ষা করা হচ্ছে

এখন, TensorBoard শুরু করুন, আপনি উপরে যে রুট লগ ডিরেক্টরিটি ব্যবহার করেছেন তা উল্লেখ করে।

TensorBoard এর UI স্পিন আপ হওয়ার জন্য কয়েক সেকেন্ড অপেক্ষা করুন।

%tensorboard --logdir logs/scalars

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

আপনি যখন প্রশিক্ষণের অগ্রগতি দেখছেন, লক্ষ্য করুন কিভাবে প্রশিক্ষণ এবং বৈধতা হ্রাস উভয়ই দ্রুত হ্রাস পায় এবং তারপরে স্থিতিশীল থাকে। প্রকৃতপক্ষে, আপনি 25টি যুগের পরে প্রশিক্ষণ বন্ধ করতে পারতেন, কারণ সেই বিন্দুর পরে প্রশিক্ষণের খুব বেশি উন্নতি হয়নি।

নির্দিষ্ট ডেটা পয়েন্টগুলি দেখতে গ্রাফের উপর হভার করুন। আপনি আপনার মাউস দিয়ে জুম করার চেষ্টা করতে পারেন, বা আরও বিশদ দেখতে তাদের অংশ নির্বাচন করতে পারেন।

বাম দিকে "রান" নির্বাচক লক্ষ্য করুন। একটি "রান" প্রশিক্ষণের একটি রাউন্ড থেকে লগের একটি সেট উপস্থাপন করে, এই ক্ষেত্রে Model.fit() এর ফলাফল। ডেভেলপারদের সাধারণত অনেক, অনেক রান থাকে, কারণ তারা পরীক্ষা করে এবং সময়ের সাথে সাথে তাদের মডেল বিকাশ করে।

নির্দিষ্ট রান বাছাই করতে রান নির্বাচক ব্যবহার করুন, অথবা শুধুমাত্র প্রশিক্ষণ বা বৈধতা থেকে বেছে নিন। রানের তুলনা করা আপনাকে মূল্যায়ন করতে সাহায্য করবে আপনার কোডের কোন সংস্করণটি আপনার সমস্যার সমাধান করছে।

ঠিক আছে, টেনসরবোর্ডের ক্ষতির গ্রাফ দেখায় যে প্রশিক্ষণ এবং বৈধতা উভয়ের জন্য ক্ষতি ধারাবাহিকভাবে হ্রাস পেয়েছে এবং তারপরে স্থিতিশীল হয়েছে। এর মানে হল যে মডেলের মেট্রিক্স সম্ভবত খুব ভাল! এখন দেখুন মডেলটি বাস্তব জীবনে কেমন আচরণ করে।

ইনপুট ডেটা (60, 25, 2) দেওয়া, y অক্ষের = 0.5x +2 উত্পাদ উচিত (32, 14.5, 3)। মডেল কি একমত?

print(model.predict([60, 25, 2]))
# True values to compare predictions against: 
# [[32.0]
#  [14.5]
#  [ 3.0]]
[[32.234306 ]
 [14.5974245]
 [ 3.0074697]]

খারাপ না!

কাস্টম স্কেলার লগ করা হচ্ছে

কি হবে যদি আপনি এই ধরণের কোনো হিসাবে কাস্টম মূল্যবোধ, লগ ইন করতে চাই গতিশীল শেখার হার ? এটি করার জন্য, আপনাকে TensorFlow Summary API ব্যবহার করতে হবে।

রিগ্রেশন মডেলকে পুনরায় প্রশিক্ষণ দিন এবং একটি কাস্টম শেখার হার লগ করুন। এখানে কিভাবে:

  1. একটি ফাইল লেখক তৈরি করুন, ব্যবহার tf.summary.create_file_writer()
  2. একটি কাস্টম শেখার হার ফাংশন সংজ্ঞায়িত করুন. এই Keras প্রেরণ করা হবে LearningRateScheduler কলব্যাক।
  3. লার্নিং হার ফাংশন ভিতরে, ব্যবহার tf.summary.scalar() কাস্টম শেখার হার লগইন করুন।
  4. Model.fit() এ LearningRateScheduler কলব্যাক পাস করুন।

সাধারণভাবে, একটি কাস্টম স্কালে লগ ইন করার, আপনি ব্যবহার করতে হবে tf.summary.scalar() একটি ফাইল লেখকের সাথে। ফাইল লেখক নিদিষ্ট ডিরেক্টরিতে এই রান জন্য তথ্য লেখার জন্য দায়ী এবং পরোক্ষভাবে ব্যবহার করা হয় যখন আপনি ব্যবহার tf.summary.scalar()

logdir = "logs/scalars/" + datetime.now().strftime("%Y%m%d-%H%M%S")
file_writer = tf.summary.create_file_writer(logdir + "/metrics")
file_writer.set_as_default()

def lr_schedule(epoch):
  """
  Returns a custom learning rate that decreases as epochs progress.
  """
  learning_rate = 0.2
  if epoch > 10:
    learning_rate = 0.02
  if epoch > 20:
    learning_rate = 0.01
  if epoch > 50:
    learning_rate = 0.005

  tf.summary.scalar('learning rate', data=learning_rate, step=epoch)
  return learning_rate

lr_callback = keras.callbacks.LearningRateScheduler(lr_schedule)
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model = keras.models.Sequential([
    keras.layers.Dense(16, input_dim=1),
    keras.layers.Dense(1),
])

model.compile(
    loss='mse', # keras.losses.mean_squared_error
    optimizer=keras.optimizers.SGD(),
)

training_history = model.fit(
    x_train, # input
    y_train, # output
    batch_size=train_size,
    verbose=0, # Suppress chatty output; use Tensorboard instead
    epochs=100,
    validation_data=(x_test, y_test),
    callbacks=[tensorboard_callback, lr_callback],
)

আসুন আবার টেনসরবোর্ড দেখি।

%tensorboard --logdir logs/scalars

নোটিশ বাম দিকে "রান" নির্বাচক ব্যবহার করে, আপনি একটি আছে <timestamp>/metrics রান। এই দৌড় নির্বাচন করা একটি "শেখার হার" গ্রাফ প্রদর্শন করে যা আপনাকে এই দৌড়ের সময় শেখার হারের অগ্রগতি যাচাই করতে দেয়।

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

এই মডেল কিভাবে কাজ করে?

print(model.predict([60, 25, 2]))
# True values to compare predictions against: 
# [[32.0]
#  [14.5]
#  [ 3.0]]
[[32.234013 ]
 [14.5973015]
 [ 3.0074618]]