MinDiffModel কাস্টমাইজ করা

ভূমিকা

অধিকাংশ ক্ষেত্রে, ব্যবহার MinDiffModel সরাসরি যেমন বর্ণিত "MinDiffModel সঙ্গে MinDiff একীভূত" নির্দেশিকা যথেষ্ট। যাইহোক, এটা সম্ভব যে আপনি কাস্টমাইজড আচরণ প্রয়োজন হবে. এর দুটি প্রাথমিক কারণ হল:

  • keras.Model আপনি ব্যবহার করছেন যে আপনি সংরক্ষণ করতে চান কাস্টম আচরণ আছে।
  • যদি আপনি চান MinDiffModel ডিফল্ট থেকে ভিন্নভাবে আচরণ করে।

উভয় ক্ষেত্রেই, আপনি উপশ্রেণী করতে হবে MinDiffModel কাঙ্ক্ষিত ফলাফল অর্জন করা।

সেটআপ

pip install -q --upgrade tensorflow-model-remediation
import tensorflow as tf
tf.get_logger().setLevel('ERROR')  # Avoid TF warnings.
from tensorflow_model_remediation import min_diff
from tensorflow_model_remediation.tools.tutorials_utils import uci as tutorials_utils

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

# Original Dataset for training, sampled at 0.3 for reduced runtimes.
train_df = tutorials_utils.get_uci_data(split='train', sample=0.3)
train_ds = tutorials_utils.df_to_dataset(train_df, batch_size=128)

# Dataset needed to train with MinDiff.
train_with_min_diff_ds = (
    tutorials_utils.get_uci_with_min_diff_dataset(split='train', sample=0.3))

মূল মডেল কাস্টমাইজেশন সংরক্ষণ

tf.keras.Model সহজে হিসাবে বর্ণনা subclassing মাধ্যমে অনুকূলিতকরণ করা ডিজাইন করা হয়েছে এখানে । আপনার মডেল বাস্তবায়নের যে আপনার যখন MinDiff আবেদন সংরক্ষণ করতে ইচ্ছুক কাস্টমাইজড হয়ে থাকে, আপনি উপশ্রেণী করতে হবে MinDiffModel

আসল কাস্টম মডেল

আপনি কীভাবে কাস্টমাইজেশন সংরক্ষণ যে একটি বৈশিষ্ট্য সেট করে একটি কাস্টম মডেল তৈরি করতে পারেন তা দেখার জন্য True যখন তার নিজস্ব train_step বলা হয়। এটি একটি দরকারী কাস্টমাইজেশন নয় কিন্তু আচরণ চিত্রিত করতে পরিবেশন করবে।

class CustomModel(tf.keras.Model):

  # Customized train_step
  def train_step(self, *args, **kwargs):
    self.used_custom_train_step = True  # Marker that we can check for.
    return super(CustomModel, self).train_step(*args, **kwargs)

যেমন একটি মডেল প্রশিক্ষণ একটি স্বাভাবিক হিসাবে একই দেখাবে Sequential মডেল।

model = tutorials_utils.get_uci_model(model_class=CustomModel)  # Use CustomModel.

model.compile(optimizer='adam', loss='binary_crossentropy')

_ = model.fit(train_ds.take(1), epochs=1, verbose=0)

# Model has used the custom train_step.
print('Model used the custom train_step:')
print(hasattr(model, 'used_custom_train_step'))  # True
Model used the custom train_step:
True

সাবক্লাসিং MinDiffModel

আপনি চেষ্টা এবং ব্যবহার করা হলে MinDiffModel সরাসরি, মডেল কাস্টম ব্যবহার করা হবে না train_step

model = tutorials_utils.get_uci_model(model_class=CustomModel)
model = min_diff.keras.MinDiffModel(model, min_diff.losses.MMDLoss())

model.compile(optimizer='adam', loss='binary_crossentropy')

_ = model.fit(train_with_min_diff_ds.take(1), epochs=1, verbose=0)

# Model has not used the custom train_step.
print('Model used the custom train_step:')
print(hasattr(model, 'used_custom_train_step'))  # False
Model used the custom train_step:
False

অর্ডার সঠিক ব্যবহার করার জন্য train_step পদ্ধতি, আপনি যে উভয় উপশ্রেণী একটি কাস্টম বর্গ প্রয়োজন MinDiffModel এবং CustomModel

class CustomMinDiffModel(min_diff.keras.MinDiffModel, CustomModel):
  pass  # No need for any further implementation.

এই মডেল প্রশিক্ষণ ব্যবহার করবে train_step থেকে CustomModel

model = tutorials_utils.get_uci_model(model_class=CustomModel)

model = CustomMinDiffModel(model, min_diff.losses.MMDLoss())

model.compile(optimizer='adam', loss='binary_crossentropy')

_ = model.fit(train_with_min_diff_ds.take(1), epochs=1, verbose=0)

# Model has used the custom train_step.
print('Model used the custom train_step:')
print(hasattr(model, 'used_custom_train_step'))  # True
Model used the custom train_step:
True

এর কাস্টমাইজ ডিফল্ট ব্যবহার MinDiffModel

অন্যান্য ক্ষেত্রে, আপনি নির্দিষ্ট ডিফল্ট ব্যবহার পরিবর্তন করতে পারেন MinDiffModel । এই সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে ডিফল্ট unpacking আচরণ যদি আপনি ব্যবহার করবেন না সঠিকভাবে আপনার ডেটা পরিচালনা করতে পরিবর্তন করা হয় pack_min_diff_data

একটি কাস্টম বিন্যাসে ডেটা প্যাক করার সময়, এটি নিম্নরূপ প্রদর্শিত হতে পারে।

def _reformat_input(inputs, original_labels):
  min_diff_data = min_diff.keras.utils.unpack_min_diff_data(inputs)
  original_inputs = min_diff.keras.utils.unpack_original_inputs(inputs)

  return ({
      'min_diff_data': min_diff_data,
      'original_inputs': original_inputs}, original_labels)

customized_train_with_min_diff_ds = train_with_min_diff_ds.map(_reformat_input)

customized_train_with_min_diff_ds tuples গঠিত ডেটা সেটটি আয় ব্যাচ (x, y) যেখানে x ধারণকারী একটি অভি হয় min_diff_data এবং original_inputs এবং y হল original_labels

for x, _ in customized_train_with_min_diff_ds.take(1):
  print('Type of x:', type(x))  # dict
  print('Keys of x:', x.keys())  # 'min_diff_data', 'original_inputs'
Type of x: <class 'dict'>
Keys of x: dict_keys(['min_diff_data', 'original_inputs'])

এই ডেটা বিন্যাস কি নয় MinDiffModel ডিফল্টরূপে আশা এবং ক্ষণস্থায়ী customized_train_with_min_diff_ds এটি অপ্রত্যাশিত আচরণের স্থাপিত হবে। এটি ঠিক করার জন্য আপনাকে নিজের সাবক্লাস তৈরি করতে হবে।

class CustomUnpackingMinDiffModel(min_diff.keras.MinDiffModel):

  def unpack_min_diff_data(self, inputs):
    return inputs['min_diff_data']

  def unpack_original_inputs(self, inputs):
    return inputs['original_inputs']

এই সাবক্লাসের সাহায্যে, আপনি অন্যান্য উদাহরণের মতো প্রশিক্ষণ দিতে পারেন।

model = tutorials_utils.get_uci_model()
model = CustomUnpackingMinDiffModel(model, min_diff.losses.MMDLoss())

model.compile(optimizer='adam', loss='binary_crossentropy')

_ = model.fit(customized_train_with_min_diff_ds, epochs=1)
77/77 [==============================] - 4s 30ms/step - loss: 0.6690 - min_diff_loss: 0.0395

একটি কাস্টমাইজড সীমাবদ্ধতা MinDiffModel

একটি কাস্টম তৈরি করা হচ্ছে MinDiffModel আরো জটিল ব্যবহারের ক্ষেত্রে জন্য নমনীয়তা বিপুল পরিমাণ প্রদান করে। যাইহোক, এখনও কিছু প্রান্ত কেস আছে যে এটি সমর্থন করবে না.

সামনে প্রাক-প্রক্রিয়াকরণ বা ইনপুট ভ্যালিডেশন call

একটি উপশ্রেণী সবচেয়ে বড় সীমাবদ্ধতা MinDiffModel এটি প্রয়োজন x ইনপুট ডেটা উপাদান (যেমন ব্যাচ দ্বারা ফিরে প্রথম বা শুধুমাত্র উপাদান tf.data.Dataset ) মাধ্যমে গৃহীত হবে preprocessing বা বৈধতা ছাড়া call

এই কেবল কারণ min_diff_data মধ্যে বস্তাবন্দী হয় x ইনপুট ডেটা অংশটি। কোন প্রাক-প্রক্রিয়াকরণ বা বৈধতা ধারণকারী অতিরিক্ত গঠন আশা করা হবে না min_diff_data এবং সম্ভবত ভঙ্গ করবে।

যদি প্রিপ্রসেসিং বা বৈধতা সহজেই কাস্টমাইজ করা যায় (যেমন তার নিজস্ব পদ্ধতিতে ফ্যাক্টর করা হয়) তাহলে এটি অতিরিক্ত কাঠামো সঠিকভাবে পরিচালনা করে তা নিশ্চিত করার জন্য এটিকে ওভাররাইড করে সহজেই সমাধান করা হয়।

বৈধতা সহ একটি উদাহরণ এইরকম দেখতে পারে:

class CustomMinDiffModel(min_diff.keras.MinDiffModel, CustomModel):

  # Override so that it correctly handles additional `min_diff_data`.
  def validate_inputs(self, inputs):
    original_inputs = self.unpack_original_inputs(inputs)
    ...  # Optionally also validate min_diff_data
    # Call original validate method with correct inputs
    return super(CustomMinDiffModel, self).validate(original_inputs)

প্রাক-প্রক্রিয়াকরণ বা বৈধতা সহজে স্বনির্ধারিত, তারপর ব্যবহার না হয়, তাহলে MinDiffModel কাজ নাও করতে পারে এবং আপনি বর্ণনা অনুযায়ী এটা ছাড়া MinDiff সংহত করতে হবে জন্য এই সহায়িকার

পদ্ধতির নাম সংঘর্ষ

এটা সম্ভব যে আপনার মডেল পদ্ধতি যার নাম বাস্তবায়িত সাথে সংঘর্ষ হয়েছে MinDiffModel (সরকারি পদ্ধতির সম্পূর্ণ তালিকা দেখতে এপিআই ডকুমেন্টেশন )।

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

অতিরিক্ত সম্পদ