इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

वजन क्लस्टरिंग व्यापक गाइड

TensorFlow.org पर देखें Google Colab में चलाएं GitHub पर स्रोत देखें नोटबुक डाउनलोड करें

भारोत्तोलन के लिए व्यापक गाइड में आपका स्वागत है, TensorFlow मॉडल ऑप्टिमाइज़ेशन टूलकिट का हिस्सा है।

यह पृष्ठ विभिन्न उपयोग के मामलों का दस्तावेज़ देता है और दिखाता है कि हर एक के लिए एपीआई का उपयोग कैसे किया जाए। एक बार जब आप जान लें कि आपको कौन से एपीआई की जरूरत है, तो एपीआई डॉक्स में पैरामीटर और निम्न-स्तरीय विवरण खोजें:

इस मार्गदर्शिका में, निम्नलिखित उपयोग के मामले शामिल हैं:

  • एक संकुल मॉडल को परिभाषित करें।
  • चेकपॉइंट और क्लस्टर किए गए मॉडल को डिसेर्बलाइज करते हैं।
  • क्लस्टर किए गए मॉडल की सटीकता में सुधार।
  • केवल परिनियोजन के लिए, आपको संपीड़न लाभ देखने के लिए कदम उठाने होंगे।

सेट अप

 ! 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()
 
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: 1.3192 - 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.Conv2D ), प्रारंभिक परतों के विपरीत।
  • फाइन-ट्यूनिंग के दौरान गुच्छेदार परतों से पहले शुरुआती परतों को फ्रीज करें। जमे हुए परतों की संख्या को हाइपरपरमीटर के रूप में समझें। जाहिर है, सबसे प्रारंभिक परतों को फ्रीज़ करना वर्तमान क्लस्टरिंग एपीआई के लिए आदर्श है।
  • महत्वपूर्ण परतों (जैसे ध्यान तंत्र) को क्लस्टर करने से बचें।

अधिक : tfmot.clustering.keras.cluster_weights API डॉक्स प्रति परत क्लस्टरिंग कॉन्फ़िगरेशन को अलग करने के तरीके के बारे में विवरण प्रदान करते हैं।

 # 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
_________________________________________________________________

चेकपॉइंट और क्लस्टर किए गए मॉडल को डिसेर्बलाइज करते हैं

आपका उपयोग मामला: यह कोड केवल HDF5 मॉडल प्रारूप (HDF5 भार या अन्य प्रारूप नहीं) के लिए आवश्यक है।

 # 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
_________________________________________________________________

क्लस्टर किए गए मॉडल की सटीकता में सुधार

आपके विशिष्ट उपयोग के मामले में, आप जिन सुझावों पर विचार कर सकते हैं, वे हैं:

  • Centroid आरंभीकरण अंतिम अनुकूलित मॉडल सटीकता में एक महत्वपूर्ण भूमिका निभाता है। सामान्य तौर पर, लीनियर इनिशियलाइज़ेशन घनत्व और रैंडम इनिशियलाइज़ेशन को बेहतर बनाता है क्योंकि यह बड़े वज़न को याद नहीं करता है। हालाँकि, बिम्बोडल वितरण के साथ वज़न पर बहुत कम क्लस्टर्स का उपयोग करने के मामले में बेहतर सटीकता देने के लिए घनत्व आरंभीकरण देखा गया है।

  • एक सीखने की दर निर्धारित करें जो प्रशिक्षण में उपयोग किए जाने वाले से कम है जब क्लस्टर मॉडल को ठीक करते हैं।

  • मॉडल सटीकता में सुधार के लिए सामान्य विचारों के लिए, "उपयोग किए गए मॉडल को परिभाषित करें" के तहत अपने उपयोग के मामले के लिए युक्तियों की तलाश करें।

तैनाती

आकार संपीड़न के साथ निर्यात मॉडल

सामान्य गलती : दोनों मानक मानक एल्गोरिथ्म (जैसे gzip के माध्यम से) को strip_clustering और लागू करना क्लस्टरिंग के संपीड़न लाभों को देखने के लिए आवश्यक है।

 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 1ms/step - loss: 2.2136 - 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: 1822.00 bytes
Size of gzipped clustered model with stripping: 1408.00 bytes