মেট্রিক এবং অপ্টিমাইজার স্থানান্তর করুন

TensorFlow.org-এ দেখুন Google Colab-এ চালান GitHub-এ উৎস দেখুন নোটবুক ডাউনলোড করুন

TF1-এ, tf.metrics হল সমস্ত মেট্রিক ফাংশনের জন্য API নামস্থান। প্রতিটি মেট্রিক একটি ফাংশন যা label এবং prediction ইনপুট পরামিতি হিসাবে গ্রহণ করে এবং ফলাফল হিসাবে সংশ্লিষ্ট মেট্রিক্স টেনসর প্রদান করে। TF2-এ, tf.keras.metrics এ সমস্ত মেট্রিক ফাংশন এবং অবজেক্ট রয়েছে। Metric অবজেক্টটি tf.keras.Model এবং tf.keras.layers.layer মেট্রিক মান গণনা করতে ব্যবহার করা যেতে পারে।

সেটআপ

চলুন শুরু করা যাক প্রয়োজনীয় কিছু TensorFlow আমদানি দিয়ে,

import tensorflow as tf
import tensorflow.compat.v1 as tf1

এবং প্রদর্শনের জন্য কিছু সহজ তথ্য প্রস্তুত করুন:

features = [[1., 1.5], [2., 2.5], [3., 3.5]]
labels = [0, 0, 1]
eval_features = [[4., 4.5], [5., 5.5], [6., 6.5]]
eval_labels = [0, 1, 1]

TF1: এস্টিমেটর সহ tf.compat.v1.metrics

TF1-এ, মেট্রিকগুলিকে EstimatorSpeceval_metric_ops হিসাবে যোগ করা যেতে পারে, এবং op tf.metrics এ সংজ্ঞায়িত সমস্ত মেট্রিক্স ফাংশনের মাধ্যমে তৈরি করা হয়। কিভাবে tf.metrics.accuracy ব্যবহার করতে হয় তা দেখতে আপনি উদাহরণটি অনুসরণ করতে পারেন।

def _input_fn():
  return tf1.data.Dataset.from_tensor_slices((features, labels)).batch(1)

def _eval_input_fn():
  return tf1.data.Dataset.from_tensor_slices(
      (eval_features, eval_labels)).batch(1)

def _model_fn(features, labels, mode):
  logits = tf1.layers.Dense(2)(features)
  predictions = tf.argmax(input=logits, axis=1)
  loss = tf1.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits)
  optimizer = tf1.train.AdagradOptimizer(0.05)
  train_op = optimizer.minimize(loss, global_step=tf1.train.get_global_step())
  accuracy = tf1.metrics.accuracy(labels=labels, predictions=predictions)
  return tf1.estimator.EstimatorSpec(mode, 
                                     predictions=predictions,
                                     loss=loss, 
                                     train_op=train_op,
                                     eval_metric_ops={'accuracy': accuracy})

estimator = tf1.estimator.Estimator(model_fn=_model_fn)
estimator.train(_input_fn)
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpnfk2kv3b
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpnfk2kv3b', '_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:401: 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:143: 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/tmpnfk2kv3b/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 1.0451624, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 3...
INFO:tensorflow:Saving checkpoints for 3 into /tmp/tmpnfk2kv3b/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 3...
INFO:tensorflow:Loss for final step: 0.54487616.
<tensorflow_estimator.python.estimator.estimator.Estimator at 0x7f894c163990>
estimator.evaluate(_eval_input_fn)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-11-19T02:25:11
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpnfk2kv3b/model.ckpt-3
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Inference Time : 0.14330s
INFO:tensorflow:Finished evaluation at 2021-11-19-02:25:11
INFO:tensorflow:Saving dict for global step 3: accuracy = 0.6666667, global_step = 3, loss = 0.588699
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 3: /tmp/tmpnfk2kv3b/model.ckpt-3
{'accuracy': 0.6666667, 'loss': 0.588699, 'global_step': 3}

এছাড়াও, মেট্রিক্স সরাসরি tf.estimator.add_metrics() মাধ্যমে অনুমানকারীতে যোগ করা যেতে পারে।

def mean_squared_error(labels, predictions):
  labels = tf.cast(labels, predictions.dtype)
  return {"mean_squared_error": 
          tf1.metrics.mean_squared_error(labels=labels, predictions=predictions)}

estimator = tf1.estimator.add_metrics(estimator, mean_squared_error)
estimator.evaluate(_eval_input_fn)
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpnfk2kv3b', '_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}
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-11-19T02:25:12
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpnfk2kv3b/model.ckpt-3
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Inference Time : 0.14966s
INFO:tensorflow:Finished evaluation at 2021-11-19-02:25:12
INFO:tensorflow:Saving dict for global step 3: accuracy = 0.6666667, global_step = 3, loss = 0.588699, mean_squared_error = 0.33333334
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 3: /tmp/tmpnfk2kv3b/model.ckpt-3
{'accuracy': 0.6666667,
 'loss': 0.588699,
 'mean_squared_error': 0.33333334,
 'global_step': 3}

TF2: tf.keras.Model সহ কেরাস মেট্রিক্স API

TF2-এ, tf.keras.metrics এ সমস্ত মেট্রিক্স ক্লাস এবং ফাংশন রয়েছে। এগুলি একটি OOP শৈলীতে ডিজাইন করা হয়েছে এবং অন্যান্য tf.keras API এর সাথে ঘনিষ্ঠভাবে একত্রিত হয়েছে৷ সমস্ত মেট্রিক্স tf.keras.metrics নামস্থানে পাওয়া যাবে এবং সাধারণত tf.compat.v1.metrics সহ tf.keras.metrics এর মধ্যে একটি সরাসরি ম্যাপিং থাকে।

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

dataset = tf.data.Dataset.from_tensor_slices((features, labels)).batch(1)
eval_dataset = tf.data.Dataset.from_tensor_slices(
      (eval_features, eval_labels)).batch(1)

inputs = tf.keras.Input((2,))
logits = tf.keras.layers.Dense(2)(inputs)
predictions = tf.argmax(input=logits, axis=1)
model = tf.keras.models.Model(inputs, predictions)
optimizer = tf.keras.optimizers.Adagrad(learning_rate=0.05)

model.compile(optimizer, loss='mse', metrics=[tf.keras.metrics.Accuracy()])
model.evaluate(eval_dataset, return_dict=True)
3/3 [==============================] - 0s 2ms/step - loss: 0.3333 - accuracy: 0.6667
{'loss': 0.3333333432674408, 'accuracy': 0.6666666865348816}

আগ্রহী এক্সিকিউশন সক্ষম হলে, tf.keras.metrics.Metric দৃষ্টান্তগুলি সরাসরি নম্পি ডেটা বা আগ্রহী টেনসর মূল্যায়ন করতে ব্যবহার করা যেতে পারে। tf.keras.metrics.Metric .মেট্রিক বস্তু হল রাষ্ট্রীয় পাত্র। মেট্রিক মান metric.update_state(y_true, y_pred) মাধ্যমে আপডেট করা যেতে পারে এবং ফলাফল metrics.result() দ্বারা পুনরুদ্ধার করা যেতে পারে।

accuracy = tf.keras.metrics.Accuracy()

accuracy.update_state(y_true=[0, 0, 1, 1], y_pred=[0, 0, 0, 1])
accuracy.result().numpy()
0.75
accuracy.update_state(y_true=[0, 0, 1, 1], y_pred=[0, 0, 0, 0])
accuracy.update_state(y_true=[0, 0, 1, 1], y_pred=[1, 1, 0, 0])
accuracy.result().numpy()
0.41666666

tf.keras.metrics.Metric সম্পর্কে আরও বিশদ বিবরণের জন্য, অনুগ্রহ করে tf.keras.metrics.Metric এ API ডকুমেন্টেশনের পাশাপাশি মাইগ্রেশন গাইড দেখুন।

TF1.x অপ্টিমাইজার কেরাস অপ্টিমাইজারে স্থানান্তর করুন

tf.compat.v1.train এর অপ্টিমাইজার, যেমন অ্যাডাম অপ্টিমাইজার এবং গ্রেডিয়েন্ট ডিসেন্ট অপ্টিমাইজার , tf.keras.optimizers এর সমতুল্য।

নীচের সারণীটি সংক্ষিপ্ত করে যে আপনি কীভাবে এই লিগ্যাসি অপ্টিমাইজারগুলিকে তাদের কেরাস সমতুল্যগুলিতে রূপান্তর করতে পারেন৷ আপনি সরাসরি TF1.x সংস্করণটিকে TF2 সংস্করণের সাথে প্রতিস্থাপন করতে পারেন যদি না অতিরিক্ত পদক্ষেপ (যেমন ডিফল্ট শেখার হার আপডেট করা ) প্রয়োজন হয়।

মনে রাখবেন যে আপনার অপ্টিমাইজারগুলিকে রূপান্তর করা পুরানো চেকপয়েন্টগুলিকে বেমানান করে তুলতে পারে

TF1.x TF2 অতিরিক্ত পদক্ষেপ
`tf.v1.train.GradientDescentOptimizer` tf.keras.optimizers.SGD কোনোটিই নয়
`tf.v1.train.MomentumOptimizer` tf.keras.optimizers.SGD 'মোমেন্টাম' যুক্তি অন্তর্ভুক্ত করুন
`tf.v1.train.AdamOptimizer` tf.keras.optimizers.Adam `beta1` এবং `beta2` আর্গুমেন্টের নাম পরিবর্তন করে `beta_1` এবং `beta_2` এ
`tf.v1.train.RMSPropOptimizer` tf.keras.optimizers.RMSprop `ক্ষয়` আর্গুমেন্টের নাম পরিবর্তন করে `rho` করুন
`tf.v1.train.AdadeltaOptimizer` tf.keras.optimizers.Adadelta কোনোটিই নয়
`tf.v1.train.AdagradOptimizer` tf.keras.optimizers.Adagrad কোনোটিই নয়
`tf.v1.train.FtrlOptimizer` tf.keras.optimizers.Ftrl `accum_name` এবং `linear_name` আর্গুমেন্টগুলি সরান
`tf.contrib.AdamaxOptimizer` tf.keras.optimizers.Adamax `beta1`, এবং `beta2` আর্গুমেন্টের নাম পরিবর্তন করে `beta_1` এবং `beta_2` করুন
`tf.contrib.Nadam` tf.keras.optimizers.Nadam `beta1`, এবং `beta2` আর্গুমেন্টের নাম পরিবর্তন করে `beta_1` এবং `beta_2` করুন