ট্রান্সফর্ম TFX পাইপলাইন উপাদান সঞ্চালিত একটি থেকে নির্গত tf.Examples উপর ইঞ্জিনিয়ারিং বৈশিষ্ট্য ExampleGen , কম্পোনেন্ট একটি দ্বারা নির্মিত একটি ডাটা স্কিমা ব্যবহার SchemaGen উপাদান, এবং একটি SavedModel নির্গত। যখন মৃত্যুদন্ড কার্যকর করা হবে, সেভডমোডেল একটি উদাহরণজেন উপাদান থেকে নির্গত tf. উদাহরণ গ্রহণ করবে এবং রূপান্তরিত বৈশিষ্ট্য ডেটা নির্গত করবে।
- গ্রাহকরা: একটি উদাহরণজেন উপাদান থেকে টিএফ.এক উদাহরণ এবং স্কিমাজেন উপাদান থেকে ডেটা স্কিমা।
- অনুকরণসমূহ: একটি প্রশিক্ষক উপাদানকে একটি সেভডমডেল
একটি রূপান্তর উপাদান কনফিগার করা
আপনার preprocessing_fn
একবার লেখা হয়ে গেলে এটি একটি পাইথন মডিউলে সংজ্ঞায়িত করা দরকার যা ট্রান্সফর্ম উপাদানটিকে ইনপুট হিসাবে সরবরাহ করা হয়। এই মডিউলটি রূপান্তর দ্বারা লোড করা হবে এবং preprocessing_fn
নামের ফাংশনটি প্রিপ্রসেসিং পাইপলাইনটি নির্মাণের জন্য ট্রান্সফর্মের মাধ্যমে পাওয়া যাবে এবং ব্যবহার করা হবে।
transform = Transform(
examples=example_gen.outputs['examples'],
schema=schema_gen.outputs['schema'],
module_file=os.path.abspath(_taxi_transform_module_file))
ট্রান্সফর্ম এবং টেনসরফ্লো ট্রান্সফর্ম
আপনার ডেটাসেটে ফিচার ইঞ্জিনিয়ারিংয়ের জন্য ট্রান্সফর্মটি টেনসরফ্লো ট্রান্সফর্মের বিস্তৃত ব্যবহার করে। টেনসরফ্লো ট্রান্সফর্মটি আপনার মডেলটিতে যাওয়ার আগে এবং প্রশিক্ষণ প্রক্রিয়ার অংশ হিসাবে বৈশিষ্ট্য ডেটা রূপান্তর করার জন্য একটি দুর্দান্ত সরঞ্জাম। সাধারণ বৈশিষ্ট্য রূপান্তরগুলির মধ্যে রয়েছে:
- এম্বেডিং : উচ্চ মাত্রিক স্থান থেকে নিম্ন মাত্রিক স্থানে অর্থবোধক ম্যাপিং সন্ধান করে স্পার্স বৈশিষ্ট্যগুলি (কোনও শব্দভাণ্ডারের দ্বারা উত্পাদিত পূর্ণসংখ্যার IDগুলির মতো) ঘন বৈশিষ্ট্যে রূপান্তর করা। এম্বেডিংয়ের পরিচিতির জন্য মেশিন-লার্নিং ক্রাশ কোর্সে এম্বেডিংস ইউনিটটি দেখুন।
- শব্দভান্ডার জেনারেশন : স্ট্রিং বা অন্যান্য অ-সংখ্যাগত বৈশিষ্ট্যগুলিকে পূর্ণসংখ্যায় রূপান্তর করে একটি শব্দভাণ্ডার তৈরি করে যা প্রতিটি আইডি সংখ্যায় প্রতিটি অনন্য মানকে মানচিত্র করে।
- মানগুলিকে সাধারণকরণ করা হচ্ছে : সংখ্যাসূচক বৈশিষ্ট্যগুলিকে রূপান্তর করা যাতে সেগুলি সমস্ত একই ধরণের মধ্যে আসে।
- বুকিটাইজেশন : বিচ্ছিন্ন বালতিতে মান নির্ধারণ করে ধারাবাহিক বৈশিষ্ট্যগুলিতে ধারাবাহিক-মূল্যবান বৈশিষ্ট্যগুলিকে রূপান্তর করা।
- পাঠ্য বৈশিষ্ট্যগুলি সমৃদ্ধ করছে: বৈশিষ্ট্য সেটটি সমৃদ্ধ করতে টোকেন, এন-গ্রাম, সত্ত্বা, সংবেদন ইত্যাদি ইত্যাদির মতো কাঁচা ডেটা থেকে বৈশিষ্ট্য তৈরি করা।
টেনসরফ্লো ট্রান্সফর্ম এই এবং অন্যান্য অনেক ধরণের রূপান্তরগুলির জন্য সহায়তা সরবরাহ করে:
আপনার সর্বশেষ ডেটা থেকে স্বয়ংক্রিয়ভাবে একটি শব্দভান্ডার তৈরি করুন।
এটি আপনার মডেলটিতে প্রেরণের আগে আপনার ডেটাতে স্বেচ্ছাসেবী রূপান্তরগুলি সম্পাদন করুন। টেনসরফ্লো ট্রান্সফর্ম আপনার মডেলটির জন্য টেনসরফ্লো গ্রাফে রূপান্তরগুলি তৈরি করে যাতে প্রশিক্ষণ এবং অনুমানের সময় একই রূপান্তরগুলি সম্পাদিত হয়। আপনি এমন ট্রান্সফর্মেশনগুলি সংজ্ঞায়িত করতে পারেন যা সমস্ত প্রশিক্ষণের দৃষ্টান্তে কোনও বৈশিষ্ট্যের সর্বাধিক মানের মতো ডেটার গ্লোবাল বৈশিষ্ট্যগুলিকে উল্লেখ করে।
আপনি টিএফএক্স চালানোর পূর্বে আপনার ডেটাটি রূপান্তর করতে পারেন। আপনি যদি এটি টেনসরফ্লো ট্রান্সফর্মের মধ্যে করেন তবে রূপান্তরগুলি টেনসরফ্লো গ্রাফের অংশ হয়ে যায়। এই পদ্ধতির প্রশিক্ষণ / স্কু পরিবেশন এড়াতে সহায়তা করে।
আপনার মডেলিং কোডের অভ্যন্তরে রূপান্তরগুলি ফিচার কলামগুলি ব্যবহার করে। বৈশিষ্ট্য কলামগুলি ব্যবহার করে আপনি বুকটিটিজেশন, পূর্বনির্ধারিত শব্দভাণ্ডার ব্যবহার করে এমন ইন্টিগ্রাইজেশন বা ডেটা না দেখে সংজ্ঞায়িত করা যেতে পারে এমন কোনও অন্য রূপান্তরগুলি সংজ্ঞায়িত করতে পারেন।
বিপরীতে, টেনসরফ্লো ট্রান্সফর্মটি এমন রূপান্তরগুলির জন্য ডিজাইন করা হয়েছে যেগুলি আগে থেকে অজানা মানগুলি গণনা করার জন্য ডেটা থেকে পুরো পাসের প্রয়োজন হয়। উদাহরণস্বরূপ, শব্দভান্ডার জেনারেশনের জন্য ডেটা দিয়ে পুরো পাসের প্রয়োজন।
অ্যাপাচি রশ্মি ব্যবহার করে কম্পিউটিংয়ের মানগুলি ছাড়াও, টেনসরফ্লো ট্রান্সফর্ম ব্যবহারকারীদের এই মানগুলি একটি টেনসরফ্লো গ্রাফের মধ্যে এম্বেড করার অনুমতি দেয় যা পরে প্রশিক্ষণ গ্রাফের মধ্যে লোড করা যায়। উদাহরণস্বরূপ বৈশিষ্ট্যগুলিকে সাধারণকরণ করার সময়, tft.scale_to_z_score
ফাংশনটি কোনও বৈশিষ্ট্যের গড় এবং মানক বিচ্যুতি গণনা করবে এবং একটি টেনসরফ্লো গ্রাফের মধ্যে একটি প্রতিনিধিত্ব করবে যা গড় বিয়োগ করে এবং মান বিচ্যুতি দ্বারা বিভাজন করে। টেনসরফ্লো গ্রাফ নির্গত করে কেবল পরিসংখ্যানই নয়, টেনসরফ্লো ট্রান্সফর্ম আপনার প্রিপ্রসেসিং পাইপলাইনের অনুমোদনের প্রক্রিয়াটিকে সহজতর করে।
যেহেতু প্রাক-প্রসেসিংটি গ্রাফ হিসাবে প্রকাশ করা হয়, তাই এটি সার্ভারে ঘটতে পারে এবং প্রশিক্ষণ ও পরিবেশনের মধ্যে এটি সুসংগত হওয়ার নিশ্চয়তা দেয় ed এই ধারাবাহিকতা প্রশিক্ষণের একটি উত্স / পরিবেশন স্কু অপসারণ করে।
টেনসরফ্লো ট্রান্সফর্ম ব্যবহারকারীদের টেনসরফ্লো কোড ব্যবহার করে তাদের প্রিপ্রসেসিং পাইপলাইন নির্দিষ্ট করার অনুমতি দেয়। এর অর্থ হ'ল একটি পাইপলাইনটি টেনসরফ্লো গ্রাফের মতো একইভাবে নির্মিত। যদি এই গ্রাফটিতে কেবল টেনসরফ্লো অপ্স ব্যবহার করা হত তবে পাইপলাইনটি খাঁটি মানচিত্র হবে যা ইনপুটগুলির ব্যাচগুলি গ্রহণ করে এবং আউটপুটগুলির ব্যাচগুলি প্রদান করে। এই জাতীয় পাইপলাইন tf.Estimator
API ব্যবহার করার সময় আপনার input_fn
ভিতরে এই গ্রাফটি রাখার সমতুল্য। কম্পিউটিং কোয়ান্টাইলের মতো পূর্ণ-পাস ক্রিয়াকলাপ নির্দিষ্ট করার জন্য, টেনসরফ্লো ট্রান্সফর্ম analyzers
নামক একটি বিশেষ ফাংশন সরবরাহ করে যা টেনসরফ্লো অপ্সের মতো প্রদর্শিত হয়, তবে প্রকৃতপক্ষে একটি ডিফার্ড গণনা নির্দিষ্ট করে যা অ্যাপাচি বিম দ্বারা সম্পাদিত হবে এবং গ্রাফের মধ্যে আউটপুটটিকে গ্রাফের মধ্যে প্রবেশ করানো হবে ধ্রুবক। যখন একটি সাধারণ টেনসরফ্লো অপশনটি একটি ইনফুট হিসাবে একটি ব্যাচ গ্রহণ করবে, ঠিক সেই ব্যাচে কিছু গণনা সম্পাদন করবে এবং একটি ব্যাচ নির্গত করবে, একজন analyzer
সমস্ত ব্যাচের উপর একটি বৈশ্বিক হ্রাস (অ্যাপাচি বিমে প্রয়োগ করা) সম্পাদন করবে এবং ফলাফলটি ফিরিয়ে দেবে।
সাধারণ টেনসরফ্লো অপ্স এবং টেনসরফ্লো ট্রান্সফর্ম বিশ্লেষকদের একত্রিত করে ব্যবহারকারীরা তাদের ডেটা প্রি-প্রসেস করার জন্য জটিল পাইপলাইন তৈরি করতে পারবেন। উদাহরণস্বরূপ tft.scale_to_z_score
ফাংশনটি একটি ইনপুট টেনসর নেয় এবং tft.scale_to_z_score
0
এবং ভেরিয়েন্স 1
tft.scale_to_z_score
মানে স্বাভাবিক হয়। এটি হুডের নীচে mean
এবং var
অ্যানালাইজারদের কল করে এটি করে, যা গ্রাফের মধ্যে ইনপুট টেনসরের গড় এবং তারতম্যের সমানভাবে স্থায়ীভাবে উত্পাদন করতে পারে। এরপরে এটি টেনসরফ্লো অপ্সকে ব্যবহার করতে হবে গড়কে বিয়োগ করতে এবং মানক বিচ্যুতির দ্বারা ভাগ করে।
টেনসরফ্লো ট্রান্সফর্ম preprocessing_fn
টিএফএক্স ট্রান্সফর্ম উপাদানটি পড়া এবং লেখার সাথে সম্পর্কিত এপিআই কলগুলি পরিচালনা করে এবং ডিস্কে সেভডমোডেল আউটপুট লিখে ট্রান্সফর্মের ব্যবহারকে সহজ করে। একটি TFX ব্যবহারকারী হিসাবে, আপনি শুধুমাত্র নামক একটি একক ফাংশন সংজ্ঞায়িত করতে হবে preprocessing_fn
। preprocessing_fn
আপনি কয়েকটি ক্রিয়াকলাপ সংজ্ঞায়িত করেন যা টেনেসরের আউটপুট ডিক উত্পাদন করতে টেনারদের ইনপুট ডিককে ম্যানিপুলেট করে। আপনি স্কেল_ টু_০_1 এবং কম্পিউট_অ্যান্ড_্যাপ্লি_ভোকেবুলারি টেনসরফ্লো ট্রান্সফর্ম এপিআই এর মতো সহায়ক ফাংশনগুলি সন্ধান করতে পারেন বা নীচের মতন নিয়মিত টেনসরফ্লো ফাংশন ব্যবহার করতে পারেন।
def preprocessing_fn(inputs):
"""tf.transform's callback function for preprocessing inputs.
Args:
inputs: map from feature keys to raw not-yet-transformed features.
Returns:
Map from string feature key to transformed feature operations.
"""
outputs = {}
for key in _DENSE_FLOAT_FEATURE_KEYS:
# Preserve this feature as a dense float, setting nan's to the mean.
outputs[_transformed_name(key)] = transform.scale_to_z_score(
_fill_in_missing(inputs[key]))
for key in _VOCAB_FEATURE_KEYS:
# Build a vocabulary for this feature.
outputs[_transformed_name(
key)] = transform.compute_and_apply_vocabulary(
_fill_in_missing(inputs[key]),
top_k=_VOCAB_SIZE,
num_oov_buckets=_OOV_SIZE)
for key in _BUCKET_FEATURE_KEYS:
outputs[_transformed_name(key)] = transform.bucketize(
_fill_in_missing(inputs[key]), _FEATURE_BUCKET_COUNT)
for key in _CATEGORICAL_FEATURE_KEYS:
outputs[_transformed_name(key)] = _fill_in_missing(inputs[key])
# Was this passenger a big tipper?
taxi_fare = _fill_in_missing(inputs[_FARE_KEY])
tips = _fill_in_missing(inputs[_LABEL_KEY])
outputs[_transformed_name(_LABEL_KEY)] = tf.where(
tf.is_nan(taxi_fare),
tf.cast(tf.zeros_like(taxi_fare), tf.int64),
# Test if the tip was > 20% of the fare.
tf.cast(
tf.greater(tips, tf.multiply(taxi_fare, tf.constant(0.2))), tf.int64))
return outputs
প্রাকপ্রসেসিং_ফএন এর ইনপুটগুলি বোঝা
preprocessing_fn
tensors উপর অপারেশন একটি সিরিজ বর্ণনা (যে Tensor
s অথবা SparseTensor
গুলি) এবং তাই লিখতে preprocessing_fn
সঠিকভাবে তা বুঝতে আপনার ডেটা কিভাবে tensors হিসাবে প্রতিনিধিত্ব করা হয় প্রয়োজনীয়। preprocessing_fn
এ ইনপুটটি স্কিমা দ্বারা নির্ধারিত হয়। একটি Schema
প্রোটোতে Feature
একটি তালিকা থাকে এবং রূপান্তরগুলি এগুলিকে একটি "বৈশিষ্ট্য বিশিষ্ট" রূপান্তর করে (কখনও কখনও "পার্সিং স্পেক" বলা হয়) যা এমন একটি ডিক যাঁর কীগুলি বৈশিষ্ট্যর নাম এবং যার মানগুলি FixedLenFeature
বা VarLenFeature
(বা অন্যান্য) টেনসরফ্লো ট্রান্সফর্ম ব্যবহার করে না এমন বিকল্পগুলি)।
Schema
থেকে কোনও বৈশিষ্ট্য অনুমান করার নিয়মগুলি হ'ল
-
shape
সেট সহ প্রতিটিfeature
আকার এবংtf.FixedLenFeature
default_value=None
tf.FixedLenFeature
হবেtf.FixedLenFeature
presence.min_fraction
tf.FixedLenFeature
অবশ্যই অন্যথায়1
হওয়া উচিত এবং ত্রুটির ফলাফল ঘটবে, যেহেতু যখন কোনও ডিফল্ট মান থাকে না, একটিtf.FixedLenFeature
বৈশিষ্ট্যটি সর্বদা উপস্থিত থাকার প্রয়োজন। -
shape
না করে থাকা প্রতিটিfeature
ফলস্বরূপ একটিVarLenFeature
। - প্রতিটি
sparse_feature
একটি পরিণাম ডেকে আনবেtf.SparseFeature
যারsize
এবংis_sorted
দ্বারা নির্ধারিত হয়fixed_shape
এবংis_sorted
ক্ষেত্রSparseFeature
বার্তা। - একটি
sparse_feature
index_feature
বাvalue_feature
হিসাবে ব্যবহৃত বৈশিষ্ট্যগুলির বৈশিষ্ট্যvalue_feature
তাদের নিজস্ব এন্ট্রি তৈরি হবে না। -
feature
type
ক্ষেত্রের (বা একটিsparse_feature
মান বৈশিষ্ট্য) এবং বৈশিষ্ট্য বৈশিষ্ট্যেরdtype
এর মধ্যেdtype
নিম্নলিখিত সারণিতে দেওয়া হয়েছে:
type | dtype |
---|---|
schema_pb2.INT | tf.int64 |
schema_pb2.FLOAT | tf.float32 |
schema_pb2.BYTES | tf.string |
স্ট্রিং লেবেলগুলি পরিচালনা করতে টেনসরফ্লো ট্রান্সফর্ম ব্যবহার করা
সাধারণত কেউ টেন্সরফ্লো ট্রান্সফর্ম উভয়কেই একটি শব্দভান্ডার তৈরি করতে চায় এবং স্ট্রিংগুলিকে পূর্ণসংখ্যায় রূপান্তর করতে সেই শব্দভান্ডারটি প্রয়োগ করতে চায়। এই কর্মপ্রবাহটি অনুসরণ করার সময়, input_fn
নির্মিত ইনপুট_ফএনটি পূর্ণসংখ্যার স্ট্রিংটিকে আউটপুট দেবে। তবে লেবেলগুলি ব্যতিক্রম, কারণ মডেলটির আউটপুট (পূর্ণসংখ্যা) লেবেলগুলি স্ট্রিংগুলিতে মানচিত্র করতে সক্ষম হওয়ার জন্য, লেবেলের সম্ভাব্য মানগুলির তালিকা সহ input_fn
একটি স্ট্রিং লেবেল আউটপুট করতে input_fn
প্রয়োজন input_fn
উদাহরণস্বরূপ, যদি লেবেলগুলি cat
এবং dog
তবে input_fn
এর আউটপুট এই কাঁচা স্ট্রিং হওয়া উচিত এবং কীগুলি ["cat", "dog"]
একটি প্যারামিটার হিসাবে অনুমানকারীগুলিতে প্রেরণ করা প্রয়োজন (নীচে বিশদটি দেখুন)।
পূর্ণসংখ্যার স্ট্রিং লেবেলের মানচিত্রটি পরিচালনা করতে, আপনার একটি শব্দভাণ্ডার তৈরি করতে টেনসরফ্লো ট্রান্সফর্ম ব্যবহার করা উচিত। আমরা এটি নীচে কোড স্নিপেটে প্রদর্শন করি:
def _preprocessing_fn(inputs):
"""Preprocess input features into transformed features."""
...
education = inputs[features.RAW_LABEL_KEY]
_ = tft.uniques(education, vocab_filename=features.RAW_LABEL_KEY)
...
উপরের প্রিপ্রোসেসিং ফাংশনটি কাঁচা ইনপুট বৈশিষ্ট্যটি গ্রহণ করে (যা tft.uniques
ফাংশনের আউটপুট অংশ হিসাবেও ফিরে আসবে) এবং এতে tft.uniques
কল করে। মডেলটিতে অ্যাক্সেস করা যায় এমন education
জন্য একটি শব্দভান্ডার তৈরি হওয়ার ফলস্বরূপ।
উদাহরণটিতে কীভাবে কোনও লেবেলকে রূপান্তর করা যায় এবং তারপরে রূপান্তরিত লেবেলের জন্য একটি শব্দভাণ্ডার তৈরি করা যায় তাও দেখায়। বিশেষত এটি কাঁচা লেবেল education
গ্রহণ করে এবং UNKNOWN
পূর্ণসংখ্যায় রূপান্তর না করে শীর্ষ 5 লেবেল (ফ্রিকোয়েন্সি অনুসারে) UNKNOWN
রূপান্তর করে।
মডেল কোডে, শ্রেণিবদ্ধকারীটিকে অবশ্যই label_vocabulary
আর্গুমেন্ট হিসাবে tft.uniques
দ্বারা উত্পন্ন শব্দভাণ্ডার দিতে হবে। এটি প্রথমে কোনও সহায়ক সহায়তার সাথে তালিকার তালিকা হিসাবে এই শব্দভাণ্ডারটি পড়ে reading এটি নীচে স্নিপেটে দেখানো হয়েছে। নোট করুন উদাহরণ কোডটি উপরে বর্ণিত রূপান্তরিত লেবেল ব্যবহার করে তবে এখানে আমরা কাঁচা লেবেল ব্যবহারের জন্য কোড দেখাই।
def create_estimator(pipeline_inputs, hparams):
...
tf_transform_output = trainer_util.TFTransformOutput(
pipeline_inputs.transform_dir)
# vocabulary_by_name() returns a Python list.
label_vocabulary = tf_transform_output.vocabulary_by_name(
features.RAW_LABEL_KEY)
return tf.contrib.learn.DNNLinearCombinedClassifier(
...
n_classes=len(label_vocab),
label_vocabulary=label_vocab,
...)