This page was translated by the Cloud Translation API.
Switch to English

টেনসরবোর্ড স্কেলারস: কেরাসে প্রশিক্ষণ মেট্রিক্স লগিং

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

সংক্ষিপ্ত বিবরণ

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

টেনসরবোর্ডের স্কেলারস ড্যাশবোর্ড আপনাকে খুব সামান্য প্রচেষ্টা সহ একটি সাধারণ এপিআই ব্যবহার করে এই ম্যাট্রিকগুলি ভিজ্যুয়ালাইজ করতে দেয়। এই টিউটোরিয়ালটি আপনার কেরাস মডেলটি বিকাশকালে টেনসরবোর্ডের সাথে এই 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

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

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

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

প্রথমে 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. কেরাস টেনসরবোর্ড কলব্যাক তৈরি করুন
  2. একটি লগ ডিরেক্টরি উল্লেখ করুন
  3. কেরাসের মডেল.ফিট () তে টেনসরবোর্ড কলব্যাকটি পাস করুন।

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

 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(lr=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 --logdir logs/scalars
 

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

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

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

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

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

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

ইনপুট ডেটা (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]]

খারাপ না!

লগিং কাস্টম স্কেলারগুলি

আপনি যদি কাস্টম মানগুলি যেমন গতিশীল শিক্ষার হারের মতো লগ করতে চান? এটি করতে, আপনাকে টেনসরফ্লো সংক্ষিপ্ততা API ব্যবহার করা উচিত।

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

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

সাধারণভাবে, একটি কাস্টম স্কেলারে লগ করার জন্য আপনাকে ফাইল লেখকের সাথে tf.summary.scalar() ব্যবহার করতে হবে। ফাইল লেখক নির্দিষ্ট ডিরেক্টরিতে এই রান করার জন্য ডেটা লেখার জন্য দায়বদ্ধ এবং আপনি 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 রান রয়েছে। এই রানটি নির্বাচন করা একটি "শিক্ষার হার" গ্রাফ প্রদর্শন করে যা আপনাকে এই রান চলাকালীন শিক্ষার হারের অগ্রগতি যাচাই করতে দেয়।

আপনি নিজের আগের রানগুলির তুলনায় এই রানের প্রশিক্ষণ এবং বৈধতা হারাতে যাওয়া রেখার তুলনা করতে পারেন।

এই মডেলটি কী করে?

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