TensorFlow.org-এ দেখুন | Google Colab-এ চালান | GitHub-এ উৎস দেখুন | নোটবুক ডাউনলোড করুন |
TensorFlow 1-এ, আপনি tf.estimator.LoggingTensorHook
ব্যবহার করেন টেনসর নিরীক্ষণ এবং লগ করার জন্য, যখন tf.estimator.StopAtStepHook
একটি নির্দিষ্ট ধাপে প্রশিক্ষণ বন্ধ করতে সাহায্য করে tf.estimator.Estimator
এর সাথে প্রশিক্ষণের সময়। এই নোটবুকটি দেখায় কিভাবে Model.fit এর সাথে কাস্টম কেরাস কলব্যাক ( tf.keras.callbacks.Callback
) ব্যবহার করে TensorFlow 2-এ এই APIগুলি থেকে তাদের Model.fit
করা যায়।
কেরাস কলব্যাক হল এমন বস্তু যাকে প্রশিক্ষণ/মূল্যায়ন/পূর্বাভাস দেওয়ার সময় বিভিন্ন পয়েন্টে কল করা হয় বিল্ট- Model.predict
Model.evaluate
Model.fit
। আপনি tf.keras.callbacks.Callback
API ডক্সে কলব্যাক সম্পর্কে আরও শিখতে পারেন, সেইসাথে আপনার নিজস্ব কলব্যাক লেখা এবং অন্তর্নির্মিত পদ্ধতিগুলির সাথে প্রশিক্ষণ এবং মূল্যায়ন ( কলব্যাকগুলি ব্যবহার করা বিভাগ) নির্দেশিকাগুলিতে। TensorFlow 1-এর SessionRunHook থেকে SessionRunHook
2-এ কেরাস কলব্যাকে স্থানান্তরিত করার জন্য , সহকারী লজিক গাইড সহ মাইগ্রেট প্রশিক্ষণটি দেখুন।
সেটআপ
প্রদর্শনের উদ্দেশ্যে আমদানি এবং একটি সাধারণ ডেটাসেট দিয়ে শুরু করুন:
import tensorflow as tf
import tensorflow.compat.v1 as tf1
features = [[1., 1.5], [2., 2.5], [3., 3.5]]
labels = [[0.3], [0.5], [0.7]]
# Define an input function.
def _input_fn():
return tf1.data.Dataset.from_tensor_slices((features, labels)).batch(1)
টেনসরফ্লো 1: টেনসর লগ করুন এবং tf.estimator API-এর সাথে প্রশিক্ষণ বন্ধ করুন
TensorFlow 1 এ, আপনি প্রশিক্ষণের আচরণ নিয়ন্ত্রণ করতে বিভিন্ন হুক সংজ্ঞায়িত করেন। তারপর, আপনি এই tf.estimator.EstimatorSpec
এ পাস করুন।
নীচের উদাহরণে:
- টেনসর নিরীক্ষণ/লগ করার জন্য—উদাহরণস্বরূপ, মডেলের ওজন বা ক্ষতি—আপনি
tf.estimator.LoggingTensorHook
ব্যবহার করেন (tf.train.LoggingTensorHook
হল এর উপনাম)। - একটি নির্দিষ্ট ধাপে প্রশিক্ষণ বন্ধ করতে, আপনি
tf.estimator.StopAtStepHook
ব্যবহার করুন (tf.train.StopAtStepHook
হল এর উপনাম)।
def _model_fn(features, labels, mode):
dense = tf1.layers.Dense(1)
logits = dense(features)
loss = tf1.losses.mean_squared_error(labels=labels, predictions=logits)
optimizer = tf1.train.AdagradOptimizer(0.05)
train_op = optimizer.minimize(loss, global_step=tf1.train.get_global_step())
# Define the stop hook.
stop_hook = tf1.train.StopAtStepHook(num_steps=2)
# Access tensors to be logged by names.
kernel_name = tf.identity(dense.weights[0])
bias_name = tf.identity(dense.weights[1])
logging_weight_hook = tf1.train.LoggingTensorHook(
tensors=[kernel_name, bias_name],
every_n_iter=1)
# Log the training loss by the tensor object.
logging_loss_hook = tf1.train.LoggingTensorHook(
{'loss from LoggingTensorHook': loss},
every_n_secs=3)
# Pass all hooks to `EstimatorSpec`.
return tf1.estimator.EstimatorSpec(mode,
loss=loss,
train_op=train_op,
training_hooks=[stop_hook,
logging_weight_hook,
logging_loss_hook])
estimator = tf1.estimator.Estimator(model_fn=_model_fn)
# Begin training.
# The training will stop after 2 steps, and the weights/loss will also be logged.
estimator.train(_input_fn)
INFO:tensorflow:Using default config. WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmp3q__3yt7 INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmp3q__3yt7', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true graph_options { rewrite_options { meta_optimizer_iterations: ONE } } , '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1} WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version. Instructions for updating: Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts. INFO:tensorflow:Calling model_fn. WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/training/adagrad.py:77: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version. Instructions for updating: Call initializer instance with the dtype argument instead of passing it to the constructor INFO:tensorflow:Done calling model_fn. INFO:tensorflow:Create CheckpointSaverHook. INFO:tensorflow:Graph was finalized. INFO:tensorflow:Running local_init_op. INFO:tensorflow:Done running local_init_op. INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0... INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp3q__3yt7/model.ckpt. INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0... INFO:tensorflow:loss = 0.025395721, step = 0 INFO:tensorflow:Tensor("Identity:0", shape=(2, 1), dtype=float32) = [[-1.0769143] [ 1.0241832]], Tensor("Identity_1:0", shape=(1,), dtype=float32) = [0.] INFO:tensorflow:loss from LoggingTensorHook = 0.025395721 INFO:tensorflow:Tensor("Identity:0", shape=(2, 1), dtype=float32) = [[-1.1124082] [ 0.9824805]], Tensor("Identity_1:0", shape=(1,), dtype=float32) = [-0.03549388] (0.026 sec) INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 2... INFO:tensorflow:Saving checkpoints for 2 into /tmp/tmp3q__3yt7/model.ckpt. INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 2... INFO:tensorflow:Loss for final step: 0.09248222. <tensorflow_estimator.python.estimator.estimator.Estimator at 0x7f05ec414d10>
TensorFlow 2: টেনসর লগ করুন এবং কাস্টম কলব্যাক এবং Model.fit এর সাথে প্রশিক্ষণ বন্ধ করুন
TensorFlow 2-এ, যখন আপনি প্রশিক্ষণ/মূল্যায়নের জন্য অন্তর্নির্মিত Model.fit
(বা Model.evaluate
) ব্যবহার করেন, তখন আপনি কাস্টম tf.keras.callbacks.Callback
s সংজ্ঞায়িত করে টেনসর পর্যবেক্ষণ এবং প্রশিক্ষণ বন্ধ করার কনফিগার করতে পারেন। তারপর, আপনি সেগুলিকে Model.fit
(বা Model.evaluate
) এর callbacks
প্যারামিটারে পাস করুন। ( আপনার নিজের কলব্যাক লেখার গাইডে আরও জানুন।)
নীচের উদাহরণে:
-
StopAtStepHook
এর কার্যকারিতা পুনরায় তৈরি করতে, একটি কাস্টম কলব্যাক সংজ্ঞায়িত করুন (নীচেStopAtStepCallback
নাম দেওয়া হয়েছে) যেখানে আপনি নির্দিষ্ট সংখ্যক ধাপের পরে প্রশিক্ষণ বন্ধ করার জন্যon_batch_end
পদ্ধতিটি ওভাররাইড করবেন। -
LoggingTensorHook
আচরণ পুনরায় তৈরি করতে, একটি কাস্টম কলব্যাক (LoggingTensorCallback
) সংজ্ঞায়িত করুন যেখানে আপনি লগ করা টেনসরগুলিকে ম্যানুয়ালি রেকর্ড এবং আউটপুট করবেন, যেহেতু নামের দ্বারা টেনসরগুলিতে অ্যাক্সেস করা সমর্থিত নয়৷ আপনি কাস্টম কলব্যাকের ভিতরে লগিং ফ্রিকোয়েন্সি বাস্তবায়ন করতে পারেন। নীচের উদাহরণটি প্রতি দুই ধাপে ওজন প্রিন্ট করবে। অন্যান্য কৌশল যেমন প্রতি N সেকেন্ডে লগিং করাও সম্ভব।
class StopAtStepCallback(tf.keras.callbacks.Callback):
def __init__(self, stop_step=None):
super().__init__()
self._stop_step = stop_step
def on_batch_end(self, batch, logs=None):
if self.model.optimizer.iterations >= self._stop_step:
self.model.stop_training = True
print('\nstop training now')
class LoggingTensorCallback(tf.keras.callbacks.Callback):
def __init__(self, every_n_iter):
super().__init__()
self._every_n_iter = every_n_iter
self._log_count = every_n_iter
def on_batch_end(self, batch, logs=None):
if self._log_count > 0:
self._log_count -= 1
print("Logging Tensor Callback: dense/kernel:",
model.layers[0].weights[0])
print("Logging Tensor Callback: dense/bias:",
model.layers[0].weights[1])
print("Logging Tensor Callback loss:", logs["loss"])
else:
self._log_count -= self._every_n_iter
শেষ হয়ে গেলে, নতুন কলব্যাকগুলি পাস করুন— StopAtStepCallback
এবং LoggingTensorCallback
Model.fit
callbacks
প্যারামিটারে :
dataset = tf.data.Dataset.from_tensor_slices((features, labels)).batch(1)
model = tf.keras.models.Sequential([tf.keras.layers.Dense(1)])
optimizer = tf.keras.optimizers.Adagrad(learning_rate=0.05)
model.compile(optimizer, "mse")
# Begin training.
# The training will stop after 2 steps, and the weights/loss will also be logged.
model.fit(dataset, callbacks=[StopAtStepCallback(stop_step=2),
LoggingTensorCallback(every_n_iter=2)])
1/3 [=========>....................] - ETA: 0s - loss: 3.2473Logging Tensor Callback: dense/kernel: <tf.Variable 'dense/kernel:0' shape=(2, 1) dtype=float32, numpy= array([[-0.27049014], [-0.73790836]], dtype=float32)> Logging Tensor Callback: dense/bias: <tf.Variable 'dense/bias:0' shape=(1,) dtype=float32, numpy=array([0.04980864], dtype=float32)> Logging Tensor Callback loss: 3.2473244667053223 stop training now Logging Tensor Callback: dense/kernel: <tf.Variable 'dense/kernel:0' shape=(2, 1) dtype=float32, numpy= array([[-0.22285421], [-0.6911988 ]], dtype=float32)> Logging Tensor Callback: dense/bias: <tf.Variable 'dense/bias:0' shape=(1,) dtype=float32, numpy=array([0.09196297], dtype=float32)> Logging Tensor Callback loss: 5.644947052001953 3/3 [==============================] - 0s 4ms/step - loss: 5.6449 <keras.callbacks.History at 0x7f053022be90>
পরবর্তী পদক্ষেপ
এতে কলব্যাক সম্পর্কে আরও জানুন:
- API ডক্স:
tf.keras.callbacks.Callback
- গাইড: আপনার নিজের কলব্যাক লেখা
- নির্দেশিকা: অন্তর্নির্মিত পদ্ধতিগুলির সাথে প্রশিক্ষণ এবং মূল্যায়ন ( কলব্যাকগুলি ব্যবহার করা বিভাগ)
এছাড়াও আপনি নিম্নলিখিত মাইগ্রেশন-সম্পর্কিত সংস্থানগুলি দরকারী খুঁজে পেতে পারেন:
- আর্লি স্টপিং মাইগ্রেশন গাইড :
tf.keras.callbacks.EarlyStopping
হল একটি অন্তর্নির্মিত প্রাথমিক স্টপিং কলব্যাক - TensorBoard মাইগ্রেশন গাইড : TensorBoard ট্র্যাকিং এবং মেট্রিক্স প্রদর্শন সক্ষম করে
- সহকারী লজিক মাইগ্রেশন গাইড সহ প্রশিক্ষণ : টেনসরফ্লো 1-এ
SessionRunHook
থেকে টেনসরফ্লো 2-এ কেরাস কলব্যাক