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

ওজন ক্লাস্টারিং বিস্তৃত গাইড

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

টেনসরফ্লো মডেল অপটিমাইজেশন টুলকিটের অংশ ওজন ক্লাস্টারিংয়ের বিস্তৃত গাইডটিতে আপনাকে স্বাগতম।

এই পৃষ্ঠাটি বিভিন্ন ব্যবহারের নথি ডকুমেন্ট করে এবং দেখায় যে কীভাবে প্রতিটিটির জন্য এপিআই ব্যবহার করতে হয়। একবার আপনি জানতে পারবেন আপনার কোন API গুলি দরকার, এপিআই ডক্সে প্যারামিটারগুলি এবং নিম্ন-স্তরের বিশদটি সন্ধান করুন:

এই গাইডটিতে, নিম্নলিখিত ব্যবহারের ঘটনাগুলি কভার করা হয়েছে:

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

সেটআপ

! pip install -q tensorflow-model-optimization

import tensorflow as tf
import numpy as np
import tempfile
import os
import tensorflow_model_optimization as tfmot

input_dim = 20
output_dim = 20
x_train = np.random.randn(1, input_dim).astype(np.float32)
y_train = tf.keras.utils.to_categorical(np.random.randn(1), num_classes=output_dim)

def setup_model():
  model = tf.keras.Sequential([
      tf.keras.layers.Dense(input_dim, input_shape=[input_dim]),
      tf.keras.layers.Flatten()
  ])
  return model

def train_model(model):
  model.compile(
      loss=tf.keras.losses.categorical_crossentropy,
      optimizer='adam',
      metrics=['accuracy']
  )
  model.summary()
  model.fit(x_train, y_train)
  return model

def save_model_weights(model):
  _, pretrained_weights = tempfile.mkstemp('.h5')
  model.save_weights(pretrained_weights)
  return pretrained_weights

def setup_pretrained_weights():
  model= setup_model()
  model = train_model(model)
  pretrained_weights = save_model_weights(model)
  return pretrained_weights

def setup_pretrained_model():
  model = setup_model()
  pretrained_weights = setup_pretrained_weights()
  model.load_weights(pretrained_weights)
  return model

def save_model_file(model):
  _, keras_file = tempfile.mkstemp('.h5') 
  model.save(keras_file, include_optimizer=False)
  return keras_file

def get_gzipped_model_size(model):
  # It returns the size of the gzipped model in bytes.
  import os
  import zipfile

  keras_file = save_model_file(model)

  _, zipped_file = tempfile.mkstemp('.zip')
  with zipfile.ZipFile(zipped_file, 'w', compression=zipfile.ZIP_DEFLATED) as f:
    f.write(keras_file)
  return os.path.getsize(zipped_file)

setup_model()
pretrained_weights = setup_pretrained_weights()
WARNING: You are using pip version 20.2.2; however, version 20.2.3 is available.
You should consider upgrading via the '/tmpfs/src/tf_docs_env/bin/python -m pip install --upgrade pip' command.
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 20)                420       
_________________________________________________________________
flatten_1 (Flatten)          (None, 20)                0         
=================================================================
Total params: 420
Trainable params: 420
Non-trainable params: 0
_________________________________________________________________
1/1 [==============================] - 0s 1ms/step - loss: 16.1181 - accuracy: 0.0000e+00

একটি ক্লাস্টারযুক্ত মডেল সংজ্ঞায়িত করুন

একটি সম্পূর্ণ মডেল ক্লাস্টার (ক্রমানুসারে এবং কার্যকরী)

মডেলের আরও সঠিকতার জন্য টিপস :

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

সমস্ত স্তর ক্লাস্টার করতে, মডেলটিতে tfmot.clustering.keras.cluster_weights প্রয়োগ করুন।

import tensorflow_model_optimization as tfmot

cluster_weights = tfmot.clustering.keras.cluster_weights
CentroidInitialization = tfmot.clustering.keras.CentroidInitialization

clustering_params = {
  'number_of_clusters': 3,
  'cluster_centroids_init': CentroidInitialization.DENSITY_BASED
}

model = setup_model()
model.load_weights(pretrained_weights)

clustered_model = cluster_weights(model, **clustering_params)

clustered_model.summary()
Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
cluster_dense_2 (ClusterWeig (None, 20)                423       
_________________________________________________________________
cluster_flatten_2 (ClusterWe (None, 20)                0         
=================================================================
Total params: 423
Trainable params: 23
Non-trainable params: 400
_________________________________________________________________

কিছু স্তর ক্লাস্টার (ক্রমানুসারে এবং কার্যকরী মডেল)

মডেলের আরও সঠিকতার জন্য টিপস :

  • এই API এ গ্রহণযোগ্য নির্ভুলতার সাথে আপনাকে অবশ্যই প্রাক-প্রশিক্ষিত মডেলটি পাস করতে হবে। ক্লাস্টারিংয়ের ফলাফলগুলি স্ক্র্যাচ থেকে প্রশিক্ষণ মডেলগুলি সাবপারের নির্ভুলতায় ফলাফল দেয়।
  • ক্লাস্টার পরে প্রাথমিক স্তরগুলির বিপরীতে আরও tf.keras.layers.Dense প্যারামিটারগুলি (যেমন tf.keras.layers.Dense , tf.keras.layers.Conv2D ) সহ স্তরগুলি।
  • সূক্ষ্ম-টিউন করার সময় ক্লাস্টারযুক্ত স্তরগুলির আগে প্রারম্ভিক স্তরগুলি স্থির করুন। হিমশীতল স্তরগুলির হিমায়িত স্তরগুলির সংখ্যা হিসাবে বিবেচনা করুন। পরম্পরাগতভাবে, বেশিরভাগ প্রাথমিক স্তরগুলি হিমায়িত করা বর্তমান ক্লাস্টারিং এপিআইয়ের জন্য আদর্শ।
  • সমালোচনা স্তরগুলি ক্লাস্টারিং এড়িয়ে চলুন (যেমন মনোযোগ ব্যবস্থা) mechanism

আরও : tfmot.clustering.keras.cluster_weights এপিআই ডক্স কীভাবে স্তর প্রতি ক্লাস্টারিং কনফিগারেশন আলাদা করতে হয় তার বিশদ সরবরাহ করে।

# Create a base model
base_model = setup_model()
base_model.load_weights(pretrained_weights)

# Helper function uses `cluster_weights` to make only 
# the Dense layers train with clustering
def apply_clustering_to_dense(layer):
  if isinstance(layer, tf.keras.layers.Dense):
    return cluster_weights(layer, **clustering_params)
  return layer

# Use `tf.keras.models.clone_model` to apply `apply_clustering_to_dense` 
# to the layers of the model.
clustered_model = tf.keras.models.clone_model(
    base_model,
    clone_function=apply_clustering_to_dense,
)

clustered_model.summary()
Model: "sequential_3"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
cluster_dense_3 (ClusterWeig (None, 20)                423       
_________________________________________________________________
flatten_3 (Flatten)          (None, 20)                0         
=================================================================
Total params: 423
Trainable params: 23
Non-trainable params: 400
_________________________________________________________________

ক্লাস্টারযুক্ত মডেলটিকে চেকপয়েন্ট এবং ডিজাইরাইজ করুন

আপনার ব্যবহারের ক্ষেত্রে: এই কোডটি কেবলমাত্র এইচডিএফ 5 মডেল ফর্ম্যাটের জন্য প্রয়োজন (এইচডিএফ 5 ওজন বা অন্যান্য ফর্ম্যাট নয়)।

# Define the model.
base_model = setup_model()
base_model.load_weights(pretrained_weights)
clustered_model = cluster_weights(base_model, **clustering_params)

# Save or checkpoint the model.
_, keras_model_file = tempfile.mkstemp('.h5')
clustered_model.save(keras_model_file, include_optimizer=True)

# `cluster_scope` is needed for deserializing HDF5 models.
with tfmot.clustering.keras.cluster_scope():
  loaded_model = tf.keras.models.load_model(keras_model_file)

loaded_model.summary()
WARNING:tensorflow:No training configuration found in the save file, so the model was *not* compiled. Compile it manually.
Model: "sequential_4"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
cluster_dense_4 (ClusterWeig (None, 20)                423       
_________________________________________________________________
cluster_flatten_4 (ClusterWe (None, 20)                0         
=================================================================
Total params: 423
Trainable params: 23
Non-trainable params: 400
_________________________________________________________________

ক্লাস্টারযুক্ত মডেলের যথার্থতা উন্নত করুন

আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে, আপনি বিবেচনা করতে পারেন এমন টিপস রয়েছে:

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

  • ক্লাস্টার মডেলটির সূক্ষ্ম-টিউন করার সময় প্রশিক্ষণে ব্যবহৃত একটিের চেয়ে কম এমন একটি শিক্ষণ হার সেট করুন।

  • মডেলের যথার্থতা উন্নত করার জন্য সাধারণ ধারণাগুলির জন্য, "একটি ক্লাস্টার্ড মডেল সংজ্ঞায়িত করুন" এর অধীনে আপনার ব্যবহারের ক্ষেত্রে (টি) টিপসের সন্ধান করুন।

মোতায়েন

আকারের সংকোচনের সাথে মডেল রফতানি করুন

সাধারণ ভুল : উভয় strip_clustering এবং স্ট্যান্ডার্ড সংকোচনের অ্যালগরিদম প্রয়োগ করা (উদাহরণস্বরূপ gzip এর মাধ্যমে) ক্লাস্টারিংয়ের সংকোচনের সুবিধাগুলি দেখতে প্রয়োজনীয়।

model = setup_model()
clustered_model = cluster_weights(model, **clustering_params)

clustered_model.compile(
    loss=tf.keras.losses.categorical_crossentropy,
    optimizer='adam',
    metrics=['accuracy']
)

clustered_model.fit(
    x_train,
    y_train
)

final_model = tfmot.clustering.keras.strip_clustering(clustered_model)

print("final model")
final_model.summary()

print("\n")
print("Size of gzipped clustered model without stripping: %.2f bytes" 
      % (get_gzipped_model_size(clustered_model)))
print("Size of gzipped clustered model with stripping: %.2f bytes" 
      % (get_gzipped_model_size(final_model)))
1/1 [==============================] - 0s 984us/step - loss: 16.1181 - accuracy: 0.0000e+00
final model
Model: "sequential_5"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_5 (Dense)              (None, 20)                420       
_________________________________________________________________
flatten_5 (Flatten)          (None, 20)                0         
=================================================================
Total params: 420
Trainable params: 420
Non-trainable params: 0
_________________________________________________________________


Size of gzipped clustered model without stripping: 1809.00 bytes
Size of gzipped clustered model with stripping: 1399.00 bytes