এমএল কমিউনিটি দিবস 9 নভেম্বর! TensorFlow, Jax থেকে আপডেটের জন্য আমাদের সাথে যোগ দিন, এবং আরও আরও জানুন

ছাঁটাই বিস্তৃত গাইড

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

কেরাস ওজন ছাঁটাইয়ের জন্য ব্যাপক গাইডে স্বাগতম।

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

  • আপনি সমর্থিত ছাঁটাই এবং কি সুবিধাগুলো দেখতে চান দেখুন ওভারভিউ
  • একটি একক এন্ড-টু-এন্ড উদাহরণস্বরূপ, দেখুন কেঁটে সাফ উদাহরণ

নিম্নলিখিত ব্যবহারের ক্ষেত্রে আচ্ছাদিত করা হয়:

  • একটি ছাঁটাই মডেল সংজ্ঞায়িত এবং প্রশিক্ষণ।
    • অনুক্রমিক এবং কার্যকরী।
    • Keras model.fit এবং কাস্টম ট্রেনিং লুপ
  • চেকপয়েন্ট এবং একটি ছাঁটাই করা মডেল deserialize।
  • একটি ছাঁটাই করা মডেল স্থাপন করুন এবং সংকোচনের সুবিধাগুলি দেখুন।

ছাঁটাই আলগোরিদিম কনফিগারেশন জন্য পড়ুন tfmot.sparsity.keras.prune_low_magnitude এপিআই ডক্স।

সেটআপ

আপনার প্রয়োজনীয় API গুলি খুঁজে বের করার জন্য এবং উদ্দেশ্য বোঝার জন্য, আপনি চালাতে পারেন কিন্তু এই বিভাগটি পড়া বাদ দিন।

! pip install -q tensorflow-model-optimization

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

%load_ext tensorboard

import tempfile

input_shape = [20]
x_train = np.random.randn(1, 20).astype(np.float32)
y_train = tf.keras.utils.to_categorical(np.random.randn(1), num_classes=20)

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

def setup_pretrained_weights():
  model = setup_model()

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

  model.fit(x_train, y_train)

  _, pretrained_weights = tempfile.mkstemp('.tf')

  model.save_weights(pretrained_weights)

  return pretrained_weights

def get_gzipped_model_size(model):
  # Returns size of gzipped model, in bytes.
  import os
  import zipfile

  _, keras_file = tempfile.mkstemp('.h5')
  model.save(keras_file, include_optimizer=False)

  _, 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()

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

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

উন্নত মডেল নির্ভুলতার জন্য টিপস:

  • যে স্তরগুলি সবচেয়ে নির্ভুলতা হ্রাস করে সেগুলি ছাঁটাই এড়িয়ে "কিছু স্তর ছাঁটাই" করার চেষ্টা করুন।
  • স্ক্র্যাচ থেকে প্রশিক্ষণের বিপরীতে ছাঁটাইয়ের সাথে ফিনেটুন করা সাধারণত ভাল।

ছাঁটাই দিয়ে পুরো মডেল ট্রেন তৈরি করতে হলে, প্রয়োগ tfmot.sparsity.keras.prune_low_magnitude মডেলের।

base_model = setup_model()
base_model.load_weights(pretrained_weights) # optional but recommended.

model_for_pruning = tfmot.sparsity.keras.prune_low_magnitude(base_model)

model_for_pruning.summary()
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_model_optimization/python/core/sparsity/keras/pruning_wrapper.py:200: Layer.add_variable (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.
Instructions for updating:
Please use `layer.add_weight` method instead.
Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
prune_low_magnitude_dense_2  (None, 20)                822       
_________________________________________________________________
prune_low_magnitude_flatten_ (None, 20)                1         
=================================================================
Total params: 823
Trainable params: 420
Non-trainable params: 403
_________________________________________________________________

কিছু স্তর ছাঁটাই করুন (ক্রমিক এবং কার্যকরী)

একটি মডেল ছাঁটাই সঠিকতার উপর নেতিবাচক প্রভাব ফেলতে পারে। আপনি নির্ভুলতা, গতি এবং মডেলের আকারের মধ্যে ট্রেড-অফ অন্বেষণ করতে একটি মডেলের স্তরগুলি বেছে বেছে ছাঁটাই করতে পারেন।

উন্নত মডেল নির্ভুলতার জন্য টিপস:

  • স্ক্র্যাচ থেকে প্রশিক্ষণের বিপরীতে ছাঁটাইয়ের সাথে ফিনেটুন করা সাধারণত ভাল।
  • প্রথম স্তরের পরিবর্তে পরবর্তী স্তরগুলি ছাঁটাই করার চেষ্টা করুন।
  • সমালোচনামূলক স্তরগুলি ছাঁটাই করা এড়িয়ে চলুন (যেমন মনোযোগ প্রক্রিয়া)।

আরও:

  • tfmot.sparsity.keras.prune_low_magnitude এপিআই ডক্স কিভাবে স্তর প্রতি কেঁটে সাফ কনফিগারেশন তারতম্য বিবরণ প্রদান করুন।

নীচের উদাহরণে, খেজুর শুধুমাত্র Dense স্তর।

# Create a base model
base_model = setup_model()
base_model.load_weights(pretrained_weights) # optional but recommended for model accuracy

# Helper function uses `prune_low_magnitude` to make only the 
# Dense layers train with pruning.
def apply_pruning_to_dense(layer):
  if isinstance(layer, tf.keras.layers.Dense):
    return tfmot.sparsity.keras.prune_low_magnitude(layer)
  return layer

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

model_for_pruning.summary()
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.iter
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_1
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_2
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.decay
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.learning_rate
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.bias
WARNING:tensorflow:A checkpoint was restored (e.g. tf.train.Checkpoint.restore or tf.keras.Model.load_weights) but not all checkpointed values were used. See above for specific issues. Use expect_partial() on the load status object, e.g. tf.train.Checkpoint.restore(...).expect_partial(), to silence these warnings, or use assert_consumed() to make the check explicit. See https://www.tensorflow.org/guide/checkpoint#loading_mechanics for details.
Model: "sequential_3"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
prune_low_magnitude_dense_3  (None, 20)                822       
_________________________________________________________________
flatten_3 (Flatten)          (None, 20)                0         
=================================================================
Total params: 822
Trainable params: 420
Non-trainable params: 402
_________________________________________________________________

এই উদাহরণে স্তর শ্রেনীবিভাগ যদিও কি আলুবোখারা সিদ্ধান্ত নিতে, সবচেয়ে সহজ উপায় আলুবোখারা একটি বিশেষ স্তর তার সেট করতে হয় name যে নামের জন্য সম্পত্তি, এবং চেহারা clone_function

print(base_model.layers[0].name)
dense_3

আরো পঠনযোগ্য কিন্তু সম্ভাব্য কম মডেলের নির্ভুলতা

এটি ছাঁটাইয়ের সাথে সূক্ষ্ম-টিউনিংয়ের সাথে সামঞ্জস্যপূর্ণ নয়, যার কারণে এটি উপরের উদাহরণগুলির তুলনায় কম সঠিক হতে পারে যা সূক্ষ্ম-টিউনিং সমর্থন করে।

যদিও prune_low_magnitude যখন প্রাথমিক মডেল সংজ্ঞা, ওজন লোড পর উদাহরণ নিচে কাজ করে না প্রয়োগ করা যায়।

কার্যকরী উদাহরণ

# Use `prune_low_magnitude` to make the `Dense` layer train with pruning.
i = tf.keras.Input(shape=(20,))
x = tfmot.sparsity.keras.prune_low_magnitude(tf.keras.layers.Dense(10))(i)
o = tf.keras.layers.Flatten()(x)
model_for_pruning = tf.keras.Model(inputs=i, outputs=o)

model_for_pruning.summary()
Model: "functional_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 20)]              0         
_________________________________________________________________
prune_low_magnitude_dense_4  (None, 10)                412       
_________________________________________________________________
flatten_4 (Flatten)          (None, 10)                0         
=================================================================
Total params: 412
Trainable params: 210
Non-trainable params: 202
_________________________________________________________________

অনুক্রমিক উদাহরণ

# Use `prune_low_magnitude` to make the `Dense` layer train with pruning.
model_for_pruning = tf.keras.Sequential([
  tfmot.sparsity.keras.prune_low_magnitude(tf.keras.layers.Dense(20, input_shape=input_shape)),
  tf.keras.layers.Flatten()
])

model_for_pruning.summary()
Model: "sequential_4"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
prune_low_magnitude_dense_5  (None, 20)                822       
_________________________________________________________________
flatten_5 (Flatten)          (None, 20)                0         
=================================================================
Total params: 822
Trainable params: 420
Non-trainable params: 402
_________________________________________________________________

কাস্টম কেরাস স্তর ছাঁটাই করুন বা স্তরের অংশগুলি ছাঁটাই করতে পরিবর্তন করুন

সাধারণ ভুল: পক্ষপাত ছাঁটাই সাধারণত অত্যধিক মডেল সঠিকতা ক্ষতি করে।

tfmot.sparsity.keras.PrunableLayer দুই ব্যবহারের ক্ষেত্রে পরিবেশন করে:

  1. একটি কাস্টম কেরাস স্তর ছাঁটাই করুন
  2. একটি অন্তর্নির্মিত কেরাস স্তরের অংশগুলি ছাঁটাই করতে পরিবর্তন করুন।

একটি উদাহরণস্বরূপ, এপিআই অক্ষমতা শুধুমাত্র কার্নেল ছাঁটাই করার Dense স্তর। নীচের উদাহরণটি পক্ষপাতকেও ছাঁটাই করে।

class MyDenseLayer(tf.keras.layers.Dense, tfmot.sparsity.keras.PrunableLayer):

  def get_prunable_weights(self):
    # Prune bias also, though that usually harms model accuracy too much.
    return [self.kernel, self.bias]

# Use `prune_low_magnitude` to make the `MyDenseLayer` layer train with pruning.
model_for_pruning = tf.keras.Sequential([
  tfmot.sparsity.keras.prune_low_magnitude(MyDenseLayer(20, input_shape=input_shape)),
  tf.keras.layers.Flatten()
])

model_for_pruning.summary()
Model: "sequential_5"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
prune_low_magnitude_my_dense (None, 20)                843       
_________________________________________________________________
flatten_6 (Flatten)          (None, 20)                0         
=================================================================
Total params: 843
Trainable params: 420
Non-trainable params: 423
_________________________________________________________________

ট্রেনের মডেল

মডেল ফিট

ফোন করুন tfmot.sparsity.keras.UpdatePruningStep প্রশিক্ষণের সময় কলব্যাক।

সাহায্যের ডিবাগ প্রশিক্ষণ, ব্যবহার tfmot.sparsity.keras.PruningSummaries কলব্যাক।

# Define the model.
base_model = setup_model()
base_model.load_weights(pretrained_weights) # optional but recommended for model accuracy
model_for_pruning = tfmot.sparsity.keras.prune_low_magnitude(base_model)

log_dir = tempfile.mkdtemp()
callbacks = [
    tfmot.sparsity.keras.UpdatePruningStep(),
    # Log sparsity and other metrics in Tensorboard.
    tfmot.sparsity.keras.PruningSummaries(log_dir=log_dir)
]

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

model_for_pruning.fit(
    x_train,
    y_train,
    callbacks=callbacks,
    epochs=2,
)

%tensorboard --logdir={log_dir}
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.iter
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_1
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_2
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.decay
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.learning_rate
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.bias
WARNING:tensorflow:A checkpoint was restored (e.g. tf.train.Checkpoint.restore or tf.keras.Model.load_weights) but not all checkpointed values were used. See above for specific issues. Use expect_partial() on the load status object, e.g. tf.train.Checkpoint.restore(...).expect_partial(), to silence these warnings, or use assert_consumed() to make the check explicit. See https://www.tensorflow.org/guide/checkpoint#loading_mechanics for details.
Epoch 1/2
1/1 [==============================] - 0s 3ms/step - loss: 1.2485 - accuracy: 0.0000e+00
Epoch 2/2
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/ops/summary_ops_v2.py:1277: stop (from tensorflow.python.eager.profiler) is deprecated and will be removed after 2020-07-01.
Instructions for updating:
use `tf.profiler.experimental.stop` instead.
1/1 [==============================] - 0s 2ms/step - loss: 1.1999 - accuracy: 0.0000e+00

অ Colab ব্যবহারকারীদের জন্য, আপনি দেখতে পারেন পূর্ববর্তী রান ফলাফল এই কোডটি ব্লক TensorBoard.dev

কাস্টম প্রশিক্ষণ লুপ

ফোন করুন tfmot.sparsity.keras.UpdatePruningStep প্রশিক্ষণের সময় কলব্যাক।

সাহায্যের ডিবাগ প্রশিক্ষণ, ব্যবহার tfmot.sparsity.keras.PruningSummaries কলব্যাক।

# Define the model.
base_model = setup_model()
base_model.load_weights(pretrained_weights) # optional but recommended for model accuracy
model_for_pruning = tfmot.sparsity.keras.prune_low_magnitude(base_model)

# Boilerplate
loss = tf.keras.losses.categorical_crossentropy
optimizer = tf.keras.optimizers.Adam()
log_dir = tempfile.mkdtemp()
unused_arg = -1
epochs = 2
batches = 1 # example is hardcoded so that the number of batches cannot change.

# Non-boilerplate.
model_for_pruning.optimizer = optimizer
step_callback = tfmot.sparsity.keras.UpdatePruningStep()
step_callback.set_model(model_for_pruning)
log_callback = tfmot.sparsity.keras.PruningSummaries(log_dir=log_dir) # Log sparsity and other metrics in Tensorboard.
log_callback.set_model(model_for_pruning)

step_callback.on_train_begin() # run pruning callback
for _ in range(epochs):
  log_callback.on_epoch_begin(epoch=unused_arg) # run pruning callback
  for _ in range(batches):
    step_callback.on_train_batch_begin(batch=unused_arg) # run pruning callback

    with tf.GradientTape() as tape:
      logits = model_for_pruning(x_train, training=True)
      loss_value = loss(y_train, logits)
      grads = tape.gradient(loss_value, model_for_pruning.trainable_variables)
      optimizer.apply_gradients(zip(grads, model_for_pruning.trainable_variables))

  step_callback.on_epoch_end(batch=unused_arg) # run pruning callback

%tensorboard --logdir={log_dir}
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.iter
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_1
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_2
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.decay
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.learning_rate
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.bias
WARNING:tensorflow:A checkpoint was restored (e.g. tf.train.Checkpoint.restore or tf.keras.Model.load_weights) but not all checkpointed values were used. See above for specific issues. Use expect_partial() on the load status object, e.g. tf.train.Checkpoint.restore(...).expect_partial(), to silence these warnings, or use assert_consumed() to make the check explicit. See https://www.tensorflow.org/guide/checkpoint#loading_mechanics for details.

অ Colab ব্যবহারকারীদের জন্য, আপনি দেখতে পারেন পূর্ববর্তী রান ফলাফল এই কোডটি ব্লক TensorBoard.dev

ছাঁটাই করা মডেলের নির্ভুলতা উন্নত করুন

প্রথমত, এ বর্ণন tfmot.sparsity.keras.prune_low_magnitude এপিআই ডক্স বুঝতে কি একটি কেঁটে সাফ সময়তালিকা এবং সময়তালিকা ছাঁটাই প্রতিটি ধরনের গণিত।

টিপস:

  • একটি মডেল শেখার হার আছে যা খুব বেশি বা খুব কম নয় যখন মডেল ছাঁটাই করা হয়। বিবেচনা করুন ছাঁটাই সময়তালিকা একটি hyperparameter যাবে।

  • একটি দ্রুত পরীক্ষা হিসাবে, সেট করে প্রশিক্ষণের শুরুতে চূড়ান্ত sparsity করার জন্য একটি মডেল ছাঁটাই নিয়ে পরীক্ষা-নিরীক্ষা চেষ্টা begin_step একটি সঙ্গে 0 tfmot.sparsity.keras.ConstantSparsity সময়তালিকা। আপনি ভাল ফলাফলের সাথে ভাগ্যবান হতে পারেন।

  • মডেলকে পুনরুদ্ধারের সময় দিতে খুব ঘন ঘন ছাঁটাই করবেন না। ছাঁটাই সময়তালিকা একটি শালীন ডিফল্ট ফ্রিকোয়েন্সি প্রদান করে।

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

চেকপয়েন্ট এবং deserialize

চেকপয়েন্ট করার সময় আপনাকে অবশ্যই অপটিমাইজার ধাপটি সংরক্ষণ করতে হবে। এর অর্থ হল আপনি যখন চেকপয়েন্টিংয়ের জন্য কেরাস এইচডিএফ 5 মডেল ব্যবহার করতে পারেন, আপনি কেরাস এইচডিএফ 5 ওজন ব্যবহার করতে পারবেন না।

# Define the model.
base_model = setup_model()
base_model.load_weights(pretrained_weights) # optional but recommended for model accuracy
model_for_pruning = tfmot.sparsity.keras.prune_low_magnitude(base_model)

_, keras_model_file = tempfile.mkstemp('.h5')

# Checkpoint: saving the optimizer is necessary (include_optimizer=True is the default).
model_for_pruning.save(keras_model_file, include_optimizer=True)
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.iter
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_1
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_2
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.decay
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.learning_rate
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.bias
WARNING:tensorflow:A checkpoint was restored (e.g. tf.train.Checkpoint.restore or tf.keras.Model.load_weights) but not all checkpointed values were used. See above for specific issues. Use expect_partial() on the load status object, e.g. tf.train.Checkpoint.restore(...).expect_partial(), to silence these warnings, or use assert_consumed() to make the check explicit. See https://www.tensorflow.org/guide/checkpoint#loading_mechanics for details.

উপরেরগুলি সাধারণভাবে প্রযোজ্য। নীচের কোডটি শুধুমাত্র HDF5 মডেল ফরম্যাটের জন্য প্রয়োজন (HDF5 ওজন এবং অন্যান্য ফরম্যাট নয়)।

# Deserialize model.
with tfmot.sparsity.keras.prune_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_8"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
prune_low_magnitude_dense_8  (None, 20)                822       
_________________________________________________________________
prune_low_magnitude_flatten_ (None, 20)                1         
=================================================================
Total params: 823
Trainable params: 420
Non-trainable params: 403
_________________________________________________________________

ছাঁটাই করা মডেল স্থাপন করুন

সাইজ কম্প্রেশন সহ মডেল রপ্তানি করুন

সাধারণ ভুল: উভয় strip_pruning এবং একটি প্রমিত কম্প্রেশন অ্যালগরিদম প্রয়োগের (যেমন মাধ্যমে gzip,) গাছ ছাঁটাই এর কম্প্রেশন সুবিধা দেখতে প্রয়োজন।

# Define the model.
base_model = setup_model()
base_model.load_weights(pretrained_weights) # optional but recommended for model accuracy
model_for_pruning = tfmot.sparsity.keras.prune_low_magnitude(base_model)

# Typically you train the model here.

model_for_export = tfmot.sparsity.keras.strip_pruning(model_for_pruning)

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

print("\n")
print("Size of gzipped pruned model without stripping: %.2f bytes" % (get_gzipped_model_size(model_for_pruning)))
print("Size of gzipped pruned model with stripping: %.2f bytes" % (get_gzipped_model_size(model_for_export)))
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.iter
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_1
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_2
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.decay
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.learning_rate
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.bias
WARNING:tensorflow:A checkpoint was restored (e.g. tf.train.Checkpoint.restore or tf.keras.Model.load_weights) but not all checkpointed values were used. See above for specific issues. Use expect_partial() on the load status object, e.g. tf.train.Checkpoint.restore(...).expect_partial(), to silence these warnings, or use assert_consumed() to make the check explicit. See https://www.tensorflow.org/guide/checkpoint#loading_mechanics for details.
final model
Model: "sequential_9"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_9 (Dense)              (None, 20)                420       
_________________________________________________________________
flatten_10 (Flatten)         (None, 20)                0         
=================================================================
Total params: 420
Trainable params: 420
Non-trainable params: 0
_________________________________________________________________


Size of gzipped pruned model without stripping: 3299.00 bytes
Size of gzipped pruned model with stripping: 2876.00 bytes

হার্ডওয়্যার-নির্দিষ্ট অপ্টিমাইজেশন

একবার বিভিন্ন ব্যাক-এন্ডের লেটেন্সি উন্নত করতে ছাঁটাই সক্ষম , ব্লক sparsity ব্যবহার নির্দিষ্ট হার্ডওয়্যারের জন্য লেটেন্সি উন্নত করতে পারেন।

ব্লকের আকার বৃদ্ধি করলে লক্ষ্যমাত্রার নির্ভুলতার জন্য অর্জনযোগ্য সর্বোচ্চ শিখর হ্রাস পাবে। এই সত্ত্বেও, বিলম্ব এখনও উন্নত হতে পারে।

কি ব্লক sparsity জন্য সমর্থিত হয় সেগুলির বিস্তারিত জানার জন্য দেখুন tfmot.sparsity.keras.prune_low_magnitude এপিআই ডক্স।

base_model = setup_model()

# For using intrinsics on a CPU with 128-bit registers, together with 8-bit
# quantized weights, a 1x16 block size is nice because the block perfectly
# fits into the register.
pruning_params = {'block_size': [1, 16]}
model_for_pruning = tfmot.sparsity.keras.prune_low_magnitude(base_model, **pruning_params)

model_for_pruning.summary()
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.iter
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_1
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_2
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.decay
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.learning_rate
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.bias
WARNING:tensorflow:A checkpoint was restored (e.g. tf.train.Checkpoint.restore or tf.keras.Model.load_weights) but not all checkpointed values were used. See above for specific issues. Use expect_partial() on the load status object, e.g. tf.train.Checkpoint.restore(...).expect_partial(), to silence these warnings, or use assert_consumed() to make the check explicit. See https://www.tensorflow.org/guide/checkpoint#loading_mechanics for details.
Model: "sequential_10"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
prune_low_magnitude_dense_10 (None, 20)                822       
_________________________________________________________________
prune_low_magnitude_flatten_ (None, 20)                1         
=================================================================
Total params: 823
Trainable params: 420
Non-trainable params: 403
_________________________________________________________________