অনুমানকারী

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

এই নথিটি tf.estimator - একটি উচ্চ-স্তরের TensorFlow API-এর পরিচয় দেয়৷ অনুমানকারীরা নিম্নলিখিত ক্রিয়াগুলিকে এনক্যাপসুলেট করে:

  • প্রশিক্ষণ
  • মূল্যায়ন
  • ভবিষ্যদ্বাণী
  • পরিবেশন জন্য রপ্তানি

TensorFlow বেশ কিছু পূর্ব-তৈরি অনুমানক প্রয়োগ করে। কাস্টম অনুমানকারী এখনও সমর্থিত, তবে প্রধানত একটি পিছনের সামঞ্জস্যের পরিমাপ হিসাবে। নতুন কোডের জন্য কাস্টম অনুমানকারী ব্যবহার করা উচিত নয় । সমস্ত অনুমানকারী—প্রি-মেড বা কাস্টমগুলি—টি tf.estimator.Estimator ক্লাসের উপর ভিত্তি করে ক্লাস।

একটি দ্রুত উদাহরণের জন্য, এস্টিমেটর টিউটোরিয়াল চেষ্টা করুন। API ডিজাইনের একটি ওভারভিউ জন্য, সাদা কাগজ চেক করুন।

সেটআপ

pip install -U tensorflow_datasets
import tempfile
import os

import tensorflow as tf
import tensorflow_datasets as tfds

সুবিধাদি

একটি tf.keras.Model , একটি estimator একটি মডেল-স্তরের বিমূর্ততা। tf.estimator কিছু ক্ষমতা প্রদান করে যা বর্তমানে tf.keras এর জন্য বিকাশাধীন। এইগুলো:

  • প্যারামিটার সার্ভার ভিত্তিক প্রশিক্ষণ
  • সম্পূর্ণ TFX ইন্টিগ্রেশন

অনুমানকারীর ক্ষমতা

অনুমানকারী নিম্নলিখিত সুবিধা প্রদান করে:

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

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

প্রাক-তৈরি আনুমানিক ব্যবহার করে

প্রাক-তৈরি অনুমানকারী আপনাকে বেস TensorFlow API-এর তুলনায় অনেক বেশি ধারণাগত স্তরে কাজ করতে সক্ষম করে। আপনাকে আর কম্পিউটেশনাল গ্রাফ বা সেশন তৈরি করার বিষয়ে চিন্তা করতে হবে না যেহেতু এস্টিমেটররা আপনার জন্য সমস্ত "প্লম্বিং" পরিচালনা করে৷ উপরন্তু, পূর্ব-তৈরি অনুমানকারী আপনাকে শুধুমাত্র ন্যূনতম কোড পরিবর্তন করে বিভিন্ন মডেল আর্কিটেকচারের সাথে পরীক্ষা করতে দেয়। tf.estimator.DNNClassifier , উদাহরণস্বরূপ, একটি পূর্ব-তৈরি আনুমানিক শ্রেণী যা ঘন, ফিড-ফরোয়ার্ড নিউরাল নেটওয়ার্কের উপর ভিত্তি করে শ্রেণীবিভাগ মডেলগুলিকে প্রশিক্ষণ দেয়।

একটি টেনসরফ্লো প্রোগ্রাম একটি পূর্ব-তৈরি অনুমানকারীর উপর নির্ভর করে সাধারণত নিম্নলিখিত চারটি ধাপ নিয়ে গঠিত:

1. একটি ইনপুট ফাংশন লিখুন

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

  • একটি অভিধান যেখানে কীগুলি বৈশিষ্ট্যের নাম এবং মানগুলি হল Tensors (বা SparseTensors) সংশ্লিষ্ট বৈশিষ্ট্য ডেটা ধারণকারী
  • এক বা একাধিক লেবেল ধারণকারী একটি টেনসর

input_fn একটি tf.data.Dataset করবে যা সেই বিন্যাসে জোড়া দেয়।

উদাহরণস্বরূপ, নিম্নলিখিত কোডটি টাইটানিক ডেটাসেটের train.csv ফাইল থেকে একটি tf.data.Dataset তৈরি করে:

def train_input_fn():
  titanic_file = tf.keras.utils.get_file("train.csv", "https://storage.googleapis.com/tf-datasets/titanic/train.csv")
  titanic = tf.data.experimental.make_csv_dataset(
      titanic_file, batch_size=32,
      label_name="survived")
  titanic_batches = (
      titanic.cache().repeat().shuffle(500)
      .prefetch(tf.data.AUTOTUNE))
  return titanic_batches

input_fn একটি tf.Graph এ কার্যকর করা হয় এবং সরাসরি গ্রাফ টেনসর সমন্বিত একটি (features_dics, labels) জোড়া ফেরত দিতে পারে, তবে এটি ধ্রুবক ফেরত দেওয়ার মতো সাধারণ ক্ষেত্রের বাইরে ত্রুটি প্রবণ।

2. বৈশিষ্ট্য কলাম সংজ্ঞায়িত করুন।

প্রতিটি tf.feature_column একটি বৈশিষ্ট্যের নাম, এর ধরন এবং যেকোনো ইনপুট প্রাক-প্রক্রিয়াকরণ চিহ্নিত করে।

উদাহরণস্বরূপ, নিম্নলিখিত স্নিপেট তিনটি বৈশিষ্ট্য কলাম তৈরি করে।

  • প্রথমটি সরাসরি একটি ফ্লোটিং-পয়েন্ট ইনপুট হিসাবে age বৈশিষ্ট্যটি ব্যবহার করে৷
  • দ্বিতীয়টি একটি শ্রেণীবদ্ধ ইনপুট হিসাবে class বৈশিষ্ট্য ব্যবহার করে।
  • তৃতীয়টি embark_town একটি শ্রেণীবদ্ধ ইনপুট হিসাবে ব্যবহার করে, কিন্তু বিকল্পগুলি গণনা করার প্রয়োজন এড়াতে এবং বিকল্পগুলির সংখ্যা সেট করতে hashing trick ব্যবহার করে।

আরও তথ্যের জন্য, বৈশিষ্ট্য কলাম টিউটোরিয়াল দেখুন

age = tf.feature_column.numeric_column('age')
cls = tf.feature_column.categorical_column_with_vocabulary_list('class', ['First', 'Second', 'Third']) 
embark = tf.feature_column.categorical_column_with_hash_bucket('embark_town', 32)

3. প্রাসঙ্গিক প্রাক-তৈরি আনুমানিক তাত্ক্ষণিক করুন।

উদাহরণস্বরূপ, এখানে LinearClassifier নামে একটি পূর্ব-তৈরি অনুমানকারীর একটি নমুনা ইনস্ট্যান্টিয়েশন রয়েছে:

model_dir = tempfile.mkdtemp()
model = tf.estimator.LinearClassifier(
    model_dir=model_dir,
    feature_columns=[embark, cls, age],
    n_classes=2
)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpl24pp3cp', '_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}

আরও তথ্যের জন্য, আপনি লিনিয়ার ক্লাসিফায়ার টিউটোরিয়ালটিতে যেতে পারেন।

4. একটি প্রশিক্ষণ, মূল্যায়ন, বা অনুমান পদ্ধতি কল করুন।

সমস্ত অনুমানকারী train প্রদান করে, evaluate এবং predict করে।

model = model.train(input_fn=train_input_fn, steps=100)
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.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/engine/base_layer_v1.py:1684: UserWarning: `layer.add_variable` is deprecated and will be removed in a future version. Please use `layer.add_weight` method instead.
  warnings.warn('`layer.add_variable` is deprecated and '
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/optimizer_v2/ftrl.py:147: 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/tmpl24pp3cp/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 0.6931472, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 100...
INFO:tensorflow:Saving checkpoints for 100 into /tmp/tmpl24pp3cp/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 100...
INFO:tensorflow:Loss for final step: 0.6319582.
2021-09-22 20:49:10.453286: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
result = model.evaluate(train_input_fn, steps=10)

for key, value in result.items():
  print(key, ":", value)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-09-22T20:49:11
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpl24pp3cp/model.ckpt-100
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Evaluation [10/10]
INFO:tensorflow:Inference Time : 0.74609s
INFO:tensorflow:Finished evaluation at 2021-09-22-20:49:12
INFO:tensorflow:Saving dict for global step 100: accuracy = 0.734375, accuracy_baseline = 0.640625, auc = 0.7373913, auc_precision_recall = 0.64306235, average_loss = 0.563341, global_step = 100, label/mean = 0.359375, loss = 0.563341, precision = 0.734375, prediction/mean = 0.3463129, recall = 0.40869564
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 100: /tmp/tmpl24pp3cp/model.ckpt-100
accuracy : 0.734375
accuracy_baseline : 0.640625
auc : 0.7373913
auc_precision_recall : 0.64306235
average_loss : 0.563341
label/mean : 0.359375
loss : 0.563341
precision : 0.734375
prediction/mean : 0.3463129
recall : 0.40869564
global_step : 100
2021-09-22 20:49:12.168629: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.
for pred in model.predict(train_input_fn):
  for key, value in pred.items():
    print(key, ":", value)
  break
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpl24pp3cp/model.ckpt-100
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
logits : [-1.5173098]
logistic : [0.17985801]
probabilities : [0.820142   0.17985801]
class_ids : [0]
classes : [b'0']
all_class_ids : [0 1]
all_classes : [b'0' b'1']
2021-09-22 20:49:13.076528: W tensorflow/core/kernels/data/cache_dataset_ops.cc:768] The calling iterator did not fully read the dataset being cached. In order to avoid unexpected truncation of the dataset, the partially cached contents of the dataset  will be discarded. This can happen if you have an input pipeline similar to `dataset.cache().take(k).repeat()`. You should use `dataset.take(k).cache().repeat()` instead.

প্রাক-তৈরি অনুমানকারীর সুবিধা

পূর্ব-তৈরি অনুমানকারী সর্বোত্তম অনুশীলনগুলিকে এনকোড করে, নিম্নলিখিত সুবিধাগুলি প্রদান করে:

  • কম্পিউটেশনাল গ্রাফের বিভিন্ন অংশ কোথায় চালানো উচিত তা নির্ধারণের জন্য সর্বোত্তম অনুশীলন, একটি একক মেশিনে বা একটি ক্লাস্টারে কৌশল প্রয়োগ করা।
  • ইভেন্ট (সারাংশ) লেখার জন্য সর্বোত্তম অনুশীলন এবং সর্বজনীনভাবে দরকারী সারাংশ।

আপনি যদি পূর্ব-তৈরি আনুমানিক ব্যবহার না করেন, তাহলে আপনাকে অবশ্যই পূর্ববর্তী বৈশিষ্ট্যগুলি নিজেই প্রয়োগ করতে হবে।

কাস্টম অনুমানকারী

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

কেরাস মডেল থেকে একটি এস্টিমেটর তৈরি করুন

আপনি tf.keras.estimator.model_to_estimator মাধ্যমে বিদ্যমান কেরাস মডেলগুলিকে এস্টিমেটরে রূপান্তর করতে পারেন। আপনি যদি আপনার মডেল কোড আধুনিকীকরণ করতে চান তবে এটি সহায়ক, কিন্তু আপনার প্রশিক্ষণ পাইপলাইনে এখনও অনুমানকারীদের প্রয়োজন।

একটি Keras MobileNet V2 মডেল চালু করুন এবং মডেলটিকে অপ্টিমাইজার, ক্ষতি এবং মেট্রিক্স সহ প্রশিক্ষণের জন্য কম্পাইল করুন:

keras_mobilenet_v2 = tf.keras.applications.MobileNetV2(
    input_shape=(160, 160, 3), include_top=False)
keras_mobilenet_v2.trainable = False

estimator_model = tf.keras.Sequential([
    keras_mobilenet_v2,
    tf.keras.layers.GlobalAveragePooling2D(),
    tf.keras.layers.Dense(1)
])

# Compile the model
estimator_model.compile(
    optimizer='adam',
    loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
    metrics=['accuracy'])
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_160_no_top.h5
9412608/9406464 [==============================] - 0s 0us/step
9420800/9406464 [==============================] - 0s 0us/step

সংকলিত কেরাস মডেল থেকে একটি Estimator তৈরি করুন। কেরাস মডেলের প্রাথমিক মডেল অবস্থা তৈরি করা Estimator সংরক্ষিত আছে:

est_mobilenet_v2 = tf.keras.estimator.model_to_estimator(keras_model=estimator_model)
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpmosnmied
INFO:tensorflow:Using the Keras model provided.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/backend.py:401: UserWarning: `tf.keras.backend.set_learning_phase` is deprecated and will be removed after 2020-10-11. To update it, simply pass a True/False value to the `training` argument of the `__call__` method of your layer or model.
  warnings.warn('`tf.keras.backend.set_learning_phase` is deprecated and '
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/utils/generic_utils.py:497: CustomMaskWarning: Custom mask layers require a config and must override get_config. When loading, the custom mask layer must be passed to the custom_objects argument.
  category=CustomMaskWarning)
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpmosnmied', '_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}

প্রাপ্ত Estimator সাথে আপনি অন্য যে কোন Estimator সাথে ব্যবহার করবেন।

IMG_SIZE = 160  # All images will be resized to 160x160

def preprocess(image, label):
  image = tf.cast(image, tf.float32)
  image = (image/127.5) - 1
  image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
  return image, label
def train_input_fn(batch_size):
  data = tfds.load('cats_vs_dogs', as_supervised=True)
  train_data = data['train']
  train_data = train_data.map(preprocess).shuffle(500).batch(batch_size)
  return train_data

প্রশিক্ষণের জন্য, অনুমানকারীর ট্রেন ফাংশন কল করুন:

est_mobilenet_v2.train(input_fn=lambda: train_input_fn(32), steps=50)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmpmosnmied/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})
INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmpmosnmied/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})
INFO:tensorflow:Warm-starting from: /tmp/tmpmosnmied/keras/keras_model.ckpt
INFO:tensorflow:Warm-starting from: /tmp/tmpmosnmied/keras/keras_model.ckpt
INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.
INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.
INFO:tensorflow:Warm-started 158 variables.
INFO:tensorflow:Warm-started 158 variables.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpmosnmied/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpmosnmied/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 0.6994096, step = 0
INFO:tensorflow:loss = 0.6994096, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...
INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmpmosnmied/model.ckpt.
INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmpmosnmied/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...
INFO:tensorflow:Loss for final step: 0.68789804.
INFO:tensorflow:Loss for final step: 0.68789804.
<tensorflow_estimator.python.estimator.estimator.EstimatorV2 at 0x7f4b1c1e9890>

একইভাবে, মূল্যায়ন করতে, অনুমানকারীর মূল্যায়ন ফাংশনটিকে কল করুন:

est_mobilenet_v2.evaluate(input_fn=lambda: train_input_fn(32), steps=10)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/keras/engine/training.py:2470: UserWarning: `Model.state_updates` will be removed in a future version. This property should not be used in TensorFlow 2.0, as `updates` are applied automatically.
  warnings.warn('`Model.state_updates` will be removed in a future version. '
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-09-22T20:49:36
INFO:tensorflow:Starting evaluation at 2021-09-22T20:49:36
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpmosnmied/model.ckpt-50
INFO:tensorflow:Restoring parameters from /tmp/tmpmosnmied/model.ckpt-50
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Evaluation [10/10]
INFO:tensorflow:Evaluation [10/10]
INFO:tensorflow:Inference Time : 3.89658s
INFO:tensorflow:Inference Time : 3.89658s
INFO:tensorflow:Finished evaluation at 2021-09-22-20:49:39
INFO:tensorflow:Finished evaluation at 2021-09-22-20:49:39
INFO:tensorflow:Saving dict for global step 50: accuracy = 0.525, global_step = 50, loss = 0.6723582
INFO:tensorflow:Saving dict for global step 50: accuracy = 0.525, global_step = 50, loss = 0.6723582
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 50: /tmp/tmpmosnmied/model.ckpt-50
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 50: /tmp/tmpmosnmied/model.ckpt-50
{'accuracy': 0.525, 'loss': 0.6723582, 'global_step': 50}

আরো বিস্তারিত জানার জন্য, tf.keras.estimator.model_to_estimator এর জন্য ডকুমেন্টেশন দেখুন।

এস্টিমেটরের সাহায্যে অবজেক্ট-ভিত্তিক চেকপয়েন্ট সংরক্ষণ করা হচ্ছে

ডিফল্টরূপে অনুমানকারীরা চেকপয়েন্ট গাইডে বর্ণিত বস্তুর গ্রাফের পরিবর্তে পরিবর্তনশীল নামের সাথে চেকপয়েন্ট সংরক্ষণ করে। tf.train.Checkpoint নাম-ভিত্তিক চেকপয়েন্ট পড়বে, কিন্তু পরিবর্তনশীল নাম পরিবর্তন হতে পারে যখন model_fn এর বাইরে একটি মডেলের অংশগুলি সরানো হয়। ফরোয়ার্ডের সামঞ্জস্যের জন্য অবজেক্ট-ভিত্তিক চেকপয়েন্ট সংরক্ষণ করা একটি অনুমানকারীর ভিতরে একটি মডেলকে প্রশিক্ষণ দেওয়া এবং তারপর এটিকে একটির বাইরে ব্যবহার করা সহজ করে তোলে।

import tensorflow.compat.v1 as tf_compat
def toy_dataset():
  inputs = tf.range(10.)[:, None]
  labels = inputs * 5. + tf.range(5.)[None, :]
  return tf.data.Dataset.from_tensor_slices(
    dict(x=inputs, y=labels)).repeat().batch(2)
class Net(tf.keras.Model):
  """A simple linear model."""

  def __init__(self):
    super(Net, self).__init__()
    self.l1 = tf.keras.layers.Dense(5)

  def call(self, x):
    return self.l1(x)
def model_fn(features, labels, mode):
  net = Net()
  opt = tf.keras.optimizers.Adam(0.1)
  ckpt = tf.train.Checkpoint(step=tf_compat.train.get_global_step(),
                             optimizer=opt, net=net)
  with tf.GradientTape() as tape:
    output = net(features['x'])
    loss = tf.reduce_mean(tf.abs(output - features['y']))
  variables = net.trainable_variables
  gradients = tape.gradient(loss, variables)
  return tf.estimator.EstimatorSpec(
    mode,
    loss=loss,
    train_op=tf.group(opt.apply_gradients(zip(gradients, variables)),
                      ckpt.step.assign_add(1)),
    # Tell the Estimator to save "ckpt" in an object-based format.
    scaffold=tf_compat.train.Scaffold(saver=ckpt))

tf.keras.backend.clear_session()
est = tf.estimator.Estimator(model_fn, './tf_estimator_example/')
est.train(toy_dataset, steps=10)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': './tf_estimator_example/', '_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:Using config: {'_model_dir': './tf_estimator_example/', '_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:Create CheckpointSaverHook.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into ./tf_estimator_example/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into ./tf_estimator_example/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 4.659403, step = 0
INFO:tensorflow:loss = 4.659403, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 10...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 10...
INFO:tensorflow:Saving checkpoints for 10 into ./tf_estimator_example/model.ckpt.
INFO:tensorflow:Saving checkpoints for 10 into ./tf_estimator_example/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 10...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 10...
INFO:tensorflow:Loss for final step: 39.58891.
INFO:tensorflow:Loss for final step: 39.58891.
<tensorflow_estimator.python.estimator.estimator.EstimatorV2 at 0x7f4b7c451fd0>

tf.train.Checkpoint তারপর তার model_dir থেকে অনুমানকারীর চেকপয়েন্ট লোড করতে পারে।

opt = tf.keras.optimizers.Adam(0.1)
net = Net()
ckpt = tf.train.Checkpoint(
  step=tf.Variable(1, dtype=tf.int64), optimizer=opt, net=net)
ckpt.restore(tf.train.latest_checkpoint('./tf_estimator_example/'))
ckpt.step.numpy()  # From est.train(..., steps=10)
10

অনুমানকারীদের থেকে সংরক্ষিত মডেল

অনুমানকারী tf.Estimator.export_saved_model এর মাধ্যমে সংরক্ষিত মডেল রপ্তানি করে।

input_column = tf.feature_column.numeric_column("x")

estimator = tf.estimator.LinearClassifier(feature_columns=[input_column])

def input_fn():
  return tf.data.Dataset.from_tensor_slices(
    ({"x": [1., 2., 3., 4.]}, [1, 1, 0, 0])).repeat(200).shuffle(64).batch(16)
estimator.train(input_fn)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmp30_d7xz6
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmp30_d7xz6
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmp30_d7xz6', '_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:Using config: {'_model_dir': '/tmp/tmp30_d7xz6', '_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:Create CheckpointSaverHook.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp30_d7xz6/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp30_d7xz6/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 0.6931472, step = 0
INFO:tensorflow:loss = 0.6931472, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 50...
INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmp30_d7xz6/model.ckpt.
INFO:tensorflow:Saving checkpoints for 50 into /tmp/tmp30_d7xz6/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 50...
INFO:tensorflow:Loss for final step: 0.4022895.
INFO:tensorflow:Loss for final step: 0.4022895.
<tensorflow_estimator.python.estimator.canned.linear.LinearClassifierV2 at 0x7f4b1c10fd10>

একটি serving_input_receiver Estimator করতে হবে। এই ফাংশনটি একটি tf.Graph এর একটি অংশ তৈরি করে যা SavedModel দ্বারা প্রাপ্ত কাঁচা ডেটা পার্স করে।

tf.estimator.export মডিউলটিতে এই receivers তৈরি করতে সাহায্য করার জন্য ফাংশন রয়েছে।

নিম্নলিখিত কোডটি বৈশিষ্ট্য_কলামের উপর ভিত্তি করে একটি রিসিভার তৈরি করে, যা সিরিয়ালাইজড tf গ্রহণ করে। উদাহরণ প্রোটোকল বাফার, যা প্রায়শই feature_columns tf.Example সাথে ব্যবহৃত হয়।

tmpdir = tempfile.mkdtemp()

serving_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(
  tf.feature_column.make_parse_example_spec([input_column]))

estimator_base_path = os.path.join(tmpdir, 'from_estimator')
estimator_path = estimator.export_saved_model(estimator_base_path, serving_input_fn)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py:145: build_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.build_tensor_info or tf.compat.v1.saved_model.build_tensor_info.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/saved_model/signature_def_utils_impl.py:145: build_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.build_tensor_info or tf.compat.v1.saved_model.build_tensor_info.
INFO:tensorflow:Signatures INCLUDED in export for Classify: ['serving_default', 'classification']
INFO:tensorflow:Signatures INCLUDED in export for Classify: ['serving_default', 'classification']
INFO:tensorflow:Signatures INCLUDED in export for Regress: ['regression']
INFO:tensorflow:Signatures INCLUDED in export for Regress: ['regression']
INFO:tensorflow:Signatures INCLUDED in export for Predict: ['predict']
INFO:tensorflow:Signatures INCLUDED in export for Predict: ['predict']
INFO:tensorflow:Signatures INCLUDED in export for Train: None
INFO:tensorflow:Signatures INCLUDED in export for Train: None
INFO:tensorflow:Signatures INCLUDED in export for Eval: None
INFO:tensorflow:Signatures INCLUDED in export for Eval: None
INFO:tensorflow:Restoring parameters from /tmp/tmp30_d7xz6/model.ckpt-50
INFO:tensorflow:Restoring parameters from /tmp/tmp30_d7xz6/model.ckpt-50
INFO:tensorflow:Assets added to graph.
INFO:tensorflow:Assets added to graph.
INFO:tensorflow:No assets to write.
INFO:tensorflow:No assets to write.
INFO:tensorflow:SavedModel written to: /tmp/tmpi_szzuj1/from_estimator/temp-1632343781/saved_model.pb
INFO:tensorflow:SavedModel written to: /tmp/tmpi_szzuj1/from_estimator/temp-1632343781/saved_model.pb

আপনি পাইথন থেকে সেই মডেলটি লোড এবং চালাতে পারেন:

imported = tf.saved_model.load(estimator_path)

def predict(x):
  example = tf.train.Example()
  example.features.feature["x"].float_list.value.extend([x])
  return imported.signatures["predict"](
    examples=tf.constant([example.SerializeToString()]))
print(predict(1.5))
print(predict(3.5))
{'class_ids': <tf.Tensor: shape=(1, 1), dtype=int64, numpy=array([[1]])>, 'classes': <tf.Tensor: shape=(1, 1), dtype=string, numpy=array([[b'1']], dtype=object)>, 'all_classes': <tf.Tensor: shape=(1, 2), dtype=string, numpy=array([[b'0', b'1']], dtype=object)>, 'all_class_ids': <tf.Tensor: shape=(1, 2), dtype=int32, numpy=array([[0, 1]], dtype=int32)>, 'logits': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.2974025]], dtype=float32)>, 'logistic': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.5738074]], dtype=float32)>, 'probabilities': <tf.Tensor: shape=(1, 2), dtype=float32, numpy=array([[0.42619258, 0.5738074 ]], dtype=float32)>}
{'class_ids': <tf.Tensor: shape=(1, 1), dtype=int64, numpy=array([[0]])>, 'classes': <tf.Tensor: shape=(1, 1), dtype=string, numpy=array([[b'0']], dtype=object)>, 'all_classes': <tf.Tensor: shape=(1, 2), dtype=string, numpy=array([[b'0', b'1']], dtype=object)>, 'all_class_ids': <tf.Tensor: shape=(1, 2), dtype=int32, numpy=array([[0, 1]], dtype=int32)>, 'logits': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[-1.1919093]], dtype=float32)>, 'logistic': <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.23291764]], dtype=float32)>, 'probabilities': <tf.Tensor: shape=(1, 2), dtype=float32, numpy=array([[0.7670824 , 0.23291762]], dtype=float32)>}

tf.estimator.export.build_raw_serving_input_receiver_fn আপনাকে ইনপুট ফাংশন তৈরি করতে দেয় যা tf.train.Example এর পরিবর্তে কাঁচা টেনসর নেয়। উদাহরণ s।

এস্টিমেটরের সাথে tf.distribute.Strategy ব্যবহার করা (সীমিত সমর্থন)

tf.estimator হল একটি বিতরণ করা প্রশিক্ষণ TensorFlow API যা মূলত async প্যারামিটার সার্ভার পদ্ধতিকে সমর্থন করে। tf.estimator এখন tf.distribute.Strategy সমর্থন করে। আপনি যদি tf.estimator ব্যবহার করেন, তাহলে আপনি আপনার কোডে খুব কম পরিবর্তন করে বিতরণ করা প্রশিক্ষণে পরিবর্তন করতে পারেন। এর সাহায্যে, এস্টিমেটর ব্যবহারকারীরা এখন একাধিক জিপিইউ এবং একাধিক কর্মীদের সিঙ্ক্রোনাস ডিস্ট্রিবিউটেড ট্রেনিং করতে পারবেন, সেইসাথে টিপিইউ ব্যবহার করতে পারবেন। এস্টিমেটরে এই সমর্থন অবশ্য সীমিত। আরও বিশদ বিবরণের জন্য নীচের এখন কী সমর্থিত বিভাগটি দেখুন।

এস্টিমেটরের সাথে tf.distribute.Strategy ব্যবহার করা কেরাসের ক্ষেত্রে থেকে কিছুটা আলাদা। কৌশল.স্কোপ ব্যবহার করার পরিবর্তে, এখন আপনি strategy.scope অবজেক্টটিকে এস্টিমেটরের জন্য RunConfig এ পাস করুন।

আরো তথ্যের জন্য আপনি বিতরণ করা প্রশিক্ষণ গাইড দেখতে পারেন।

এখানে কোডের একটি স্নিপেট রয়েছে যা এটি একটি LinearRegressor এবং MirroredStrategy এর সাথে দেখায়:

mirrored_strategy = tf.distribute.MirroredStrategy()
config = tf.estimator.RunConfig(
    train_distribute=mirrored_strategy, eval_distribute=mirrored_strategy)
regressor = tf.estimator.LinearRegressor(
    feature_columns=[tf.feature_column.numeric_column('feats')],
    optimizer='SGD',
    config=config)
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)
INFO:tensorflow:Initializing RunConfig with distribution strategies.
INFO:tensorflow:Initializing RunConfig with distribution strategies.
INFO:tensorflow:Not using Distribute Coordinator.
INFO:tensorflow:Not using Distribute Coordinator.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpftw63jyd
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpftw63jyd
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpftw63jyd', '_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': <tensorflow.python.distribute.mirrored_strategy.MirroredStrategy object at 0x7f4b0c04c050>, '_device_fn': None, '_protocol': None, '_eval_distribute': <tensorflow.python.distribute.mirrored_strategy.MirroredStrategy object at 0x7f4b0c04c050>, '_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, '_distribute_coordinator_mode': None}
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpftw63jyd', '_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': <tensorflow.python.distribute.mirrored_strategy.MirroredStrategy object at 0x7f4b0c04c050>, '_device_fn': None, '_protocol': None, '_eval_distribute': <tensorflow.python.distribute.mirrored_strategy.MirroredStrategy object at 0x7f4b0c04c050>, '_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, '_distribute_coordinator_mode': None}

এখানে, আপনি একটি প্রিমেড এস্টিমেটর ব্যবহার করেন, কিন্তু একই কোড একটি কাস্টম এস্টিমেটরের সাথেও কাজ করে। train_distribute নির্ধারণ করে কিভাবে প্রশিক্ষণ বিতরণ করা হবে এবং eval_distribute নির্ধারণ করে কিভাবে মূল্যায়ন বিতরণ করা হবে। এটি কেরাসের থেকে আরেকটি পার্থক্য যেখানে আপনি প্রশিক্ষণ এবং ইভাল উভয়ের জন্য একই কৌশল ব্যবহার করেন।

এখন আপনি একটি ইনপুট ফাংশন সহ এই অনুমানকারীকে প্রশিক্ষণ এবং মূল্যায়ন করতে পারেন:

def input_fn():
  dataset = tf.data.Dataset.from_tensors(({"feats":[1.]}, [1.]))
  return dataset.repeat(1000).batch(10)
regressor.train(input_fn=input_fn, steps=10)
regressor.evaluate(input_fn=input_fn, steps=10)
INFO:tensorflow:Calling model_fn.
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/data/ops/dataset_ops.py:374: UserWarning: To make it possible to preserve tf.data options across serialization boundaries, their implementation has moved to be part of the TensorFlow graph. As a consequence, the options value is in general no longer known at graph construction time. Invoking this method in graph mode retains the legacy behavior of the original implementation, but note that the returned value might not reflect the actual value of the options.
  warnings.warn("To make it possible to preserve tf.data options across "
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Create CheckpointSaverHook.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/util.py:95: DistributedIteratorV1.initialize (from tensorflow.python.distribute.input_lib) is deprecated and will be removed in a future version.
Instructions for updating:
Use the iterator's `initializer` property instead.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/util.py:95: DistributedIteratorV1.initialize (from tensorflow.python.distribute.input_lib) is deprecated and will be removed in a future version.
Instructions for updating:
Use the iterator's `initializer` property instead.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpftw63jyd/model.ckpt.
INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpftw63jyd/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
2021-09-22 20:49:45.706166: W tensorflow/core/grappler/utils/graph_view.cc:836] No registered 'MultiDeviceIteratorFromStringHandle' OpKernel for GPU devices compatible with node { {node MultiDeviceIteratorFromStringHandle} }
    .  Registered:  device='CPU'

2021-09-22 20:49:45.707521: W tensorflow/core/grappler/utils/graph_view.cc:836] No registered 'MultiDeviceIteratorGetNextFromShard' OpKernel for GPU devices compatible with node { {node MultiDeviceIteratorGetNextFromShard} }
    .  Registered:  device='CPU'
INFO:tensorflow:loss = 1.0, step = 0
INFO:tensorflow:loss = 1.0, step = 0
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 10...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 10...
INFO:tensorflow:Saving checkpoints for 10 into /tmp/tmpftw63jyd/model.ckpt.
INFO:tensorflow:Saving checkpoints for 10 into /tmp/tmpftw63jyd/model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 10...
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 10...
INFO:tensorflow:Loss for final step: 2.877698e-13.
INFO:tensorflow:Loss for final step: 2.877698e-13.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /replica:0/task:0/device:CPU:0 then broadcast to ('/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-09-22T20:49:46
INFO:tensorflow:Starting evaluation at 2021-09-22T20:49:46
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from /tmp/tmpftw63jyd/model.ckpt-10
INFO:tensorflow:Restoring parameters from /tmp/tmpftw63jyd/model.ckpt-10
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
2021-09-22 20:49:46.680821: W tensorflow/core/grappler/utils/graph_view.cc:836] No registered 'MultiDeviceIteratorFromStringHandle' OpKernel for GPU devices compatible with node { {node MultiDeviceIteratorFromStringHandle} }
    .  Registered:  device='CPU'

2021-09-22 20:49:46.682161: W tensorflow/core/grappler/utils/graph_view.cc:836] No registered 'MultiDeviceIteratorGetNextFromShard' OpKernel for GPU devices compatible with node { {node MultiDeviceIteratorGetNextFromShard} }
    .  Registered:  device='CPU'
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [1/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [2/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [3/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [4/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [5/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [6/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [7/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [8/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Evaluation [9/10]
INFO:tensorflow:Evaluation [10/10]
INFO:tensorflow:Evaluation [10/10]
INFO:tensorflow:Inference Time : 0.26514s
INFO:tensorflow:Inference Time : 0.26514s
INFO:tensorflow:Finished evaluation at 2021-09-22-20:49:46
INFO:tensorflow:Finished evaluation at 2021-09-22-20:49:46
INFO:tensorflow:Saving dict for global step 10: average_loss = 1.4210855e-14, global_step = 10, label/mean = 1.0, loss = 1.4210855e-14, prediction/mean = 0.99999994
INFO:tensorflow:Saving dict for global step 10: average_loss = 1.4210855e-14, global_step = 10, label/mean = 1.0, loss = 1.4210855e-14, prediction/mean = 0.99999994
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 10: /tmp/tmpftw63jyd/model.ckpt-10
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 10: /tmp/tmpftw63jyd/model.ckpt-10
{'average_loss': 1.4210855e-14,
 'label/mean': 1.0,
 'loss': 1.4210855e-14,
 'prediction/mean': 0.99999994,
 'global_step': 10}

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

আপনার input_fn প্রতি কর্মী একবার কল করা হয়, এইভাবে প্রতি কর্মী প্রতি একটি ডেটাসেট দেয়। তারপর সেই ডেটাসেট থেকে একটি ব্যাচ সেই কর্মীর একটি প্রতিলিপিকে খাওয়ানো হয়, যার ফলে 1 জন কর্মীর উপর N প্রতিলিপিগুলির জন্য N ব্যাচগুলি গ্রহণ করা হয়। অন্য কথায়, input_fn PER_REPLICA_BATCH_SIZE ব্যাচ প্রদান করবে। এবং একটি ধাপের জন্য বিশ্বব্যাপী ব্যাচের আকার PER_REPLICA_BATCH_SIZE * strategy.num_replicas_in_sync হিসাবে প্রাপ্ত করা যেতে পারে.num_replicas_in_sync।

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

এবং একইভাবে, আপনি মাল্টি ওয়ার্কার এবং প্যারামিটার সার্ভার কৌশলগুলিও ব্যবহার করতে পারেন। কোডটি একই থাকে, কিন্তু আপনাকে tf.estimator.train_and_evaluate ব্যবহার করতে হবে এবং আপনার ক্লাস্টারে চলমান প্রতিটি বাইনারির জন্য TF_CONFIG এনভায়রনমেন্ট ভেরিয়েবল সেট করতে হবে।

এখন কি সমর্থিত?

TPUStrategy ব্যতীত সমস্ত কৌশল ব্যবহার করে এস্টিমেটরের সাথে প্রশিক্ষণের জন্য সীমিত সমর্থন রয়েছে। মৌলিক প্রশিক্ষণ এবং মূল্যায়ন কাজ করা উচিত, কিন্তু উন্নত বৈশিষ্ট্য যেমন v1.train.Scaffold একটি সংখ্যা না. এই ইন্টিগ্রেশনে অনেকগুলি বাগও থাকতে পারে এবং এই সমর্থনটিকে সক্রিয়ভাবে উন্নত করার কোন পরিকল্পনা নেই (ফোকাস কেরাস এবং কাস্টম ট্রেনিং লুপ সমর্থনে)। যদি সম্ভব হয়, তাহলে আপনার পরিবর্তে সেই APIগুলির সাথে tf.distribute ব্যবহার করতে পছন্দ করা উচিত।

প্রশিক্ষণ API মিররড স্ট্র্যাটেজি টিপিইউ কৌশল মাল্টিওয়ার্কার মিররড স্ট্র্যাটেজি কেন্দ্রীয় স্টোরেজ কৌশল প্যারামিটার সার্ভার কৌশল
অনুমানকারী API সীমিত সমর্থন সমর্থিত নয় সীমিত সমর্থন সীমিত সমর্থন সীমিত সমর্থন

উদাহরণ এবং টিউটোরিয়াল

এখানে কিছু এন্ড-টু-এন্ড উদাহরণ রয়েছে যা দেখায় কিভাবে এস্টিমেটরের সাথে বিভিন্ন কৌশল ব্যবহার করতে হয়:

  1. মাল্টি-ওয়ার্কার ট্রেনিং উইথ এস্টিমেটর টিউটোরিয়াল দেখায় কিভাবে আপনি MNIST ডেটাসেটে MultiWorkerMirroredStrategy ব্যবহার করে একাধিক কর্মীদের সাথে প্রশিক্ষণ নিতে পারেন।
  2. কুবারনেটস টেমপ্লেট ব্যবহার করে tensorflow/ecosystem বন্টন কৌশল সহ বহু-কর্মী প্রশিক্ষণ চালানোর একটি এন্ড-টু-এন্ড উদাহরণ। এটি একটি কেরাস মডেল দিয়ে শুরু হয় এবং tf.keras.estimator.model_to_estimator API ব্যবহার করে এটিকে একটি এস্টিমেটরে রূপান্তর করে।
  3. অফিসিয়াল ResNet50 মডেল, যা MirroredStrategy বা MultiWorkerMirroredStrategy ব্যবহার করে প্রশিক্ষিত হতে পারে।