ভূমিকা
অধিকাংশ ক্ষেত্রে, ব্যবহার 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
বর্ণনা অনুযায়ী বিষয়ে এই সহায়িকার ।
অতিরিক্ত সম্পদ
- সততা মূল্যায়ন উপর গভীরতা আলোচনায় একটি দেখুন ফর্সা সূচক নির্দেশিকা
- উপসম এবং MinDiff বিষয়ে সাধারণ তথ্যের জন্য, দেখুন উপসম ওভারভিউ ।
- MinDiff পার্শ্ববর্তী প্রয়োজনীয়তা উপর বিস্তারিত জানার জন্য দেখুন এই সহায়িকার ।
- Keras মধ্যে MinDiff ব্যবহার করে একটি এন্ড-টু-এন্ড টিউটোরিয়াল দেখার জন্য, দেখুন এই টিউটোরিয়াল ।