একটি নতুন ডেটাসেট তৈরি করতে এই নির্দেশিকা অনুসরণ করুন (হয় TFDS বা আপনার নিজস্ব সংগ্রহস্থলে)।
আপনি যে ডেটাসেট চান তা ইতিমধ্যেই উপস্থিত আছে কিনা তা দেখতে আমাদের ডেটাসেটের তালিকা পরীক্ষা করুন৷
টিএল; ডিআর
একটি নতুন ডেটাসেট লেখার সবচেয়ে সহজ উপায় হল TFDS CLI ব্যবহার করা:
cd path/to/my/project/datasets/
tfds new my_dataset # Create `my_dataset/my_dataset.py` template files
# [...] Manually modify `my_dataset/my_dataset_dataset_builder.py` to implement your dataset.
cd my_dataset/
tfds build # Download and prepare the dataset to `~/tensorflow_datasets/`
tfds.load('my_dataset') সহ নতুন ডেটাসেট ব্যবহার করতে:
-
tfds.loadস্বয়ংক্রিয়ভাবে~/tensorflow_datasets/my_dataset/(যেমনtfds buildদ্বারা) তৈরি করা ডেটাসেট সনাক্ত করবে এবং লোড করবে। - বিকল্পভাবে, আপনি আপনার ডেটাসেট নিবন্ধন করতে স্পষ্টভাবে
import my.project.datasets.my_datasetকরতে পারেন:
import my.project.datasets.my_dataset # Register `my_dataset`
ds = tfds.load('my_dataset') # `my_dataset` registered
ওভারভিউ
ডেটাসেটগুলি সমস্ত ধরণের ফর্ম্যাটে এবং সমস্ত ধরণের জায়গায় বিতরণ করা হয় এবং সেগুলি সর্বদা একটি ফর্ম্যাটে সংরক্ষণ করা হয় না যা একটি মেশিন লার্নিং পাইপলাইনে খাওয়ানোর জন্য প্রস্তুত৷ TFDS লিখুন।
TFDS সেই ডেটাসেটগুলিকে একটি স্ট্যান্ডার্ড ফরম্যাটে (বহিরাগত ডেটা -> সিরিয়ালাইজড ফাইলগুলি) প্রক্রিয়া করে, যা পরে মেশিন লার্নিং পাইপলাইন (ক্রমিক ফাইল -> tf.data.Dataset ) হিসাবে লোড করা যেতে পারে। সিরিয়ালাইজেশন শুধুমাত্র একবার করা হয়. পরবর্তী অ্যাক্সেস সেই প্রাক-প্রক্রিয়াকৃত ফাইলগুলি থেকে সরাসরি পড়বে।
বেশিরভাগ প্রিপ্রসেসিং স্বয়ংক্রিয়ভাবে সম্পন্ন হয়। প্রতিটি ডেটাসেট tfds.core.DatasetBuilder এর একটি সাবক্লাস প্রয়োগ করে, যা নির্দিষ্ট করে:
- কোথা থেকে ডেটা আসছে (অর্থাৎ এর ইউআরএল);
- ডেটাসেট দেখতে কেমন (যেমন এর বৈশিষ্ট্য);
- কিভাবে ডেটা বিভক্ত করা উচিত (যেমন
TRAINএবংTEST); - এবং ডেটাসেটে পৃথক উদাহরণ।
আপনার ডেটাসেট লিখুন
ডিফল্ট টেমপ্লেট: tfds new
প্রয়োজনীয় টেমপ্লেট পাইথন ফাইল তৈরি করতে TFDS CLI ব্যবহার করুন।
cd path/to/project/datasets/ # Or use `--dir=path/to/project/datasets/` below
tfds new my_dataset
এই কমান্ডটি নিম্নলিখিত কাঠামো সহ একটি নতুন my_dataset/ ফোল্ডার তৈরি করবে:
my_dataset/
__init__.py
README.md # Markdown description of the dataset.
CITATIONS.bib # Bibtex citation for the dataset.
TAGS.txt # List of tags describing the dataset.
my_dataset_dataset_builder.py # Dataset definition
my_dataset_dataset_builder_test.py # Test
dummy_data/ # (optional) Fake data (used for testing)
checksum.tsv # (optional) URL checksums (see `checksums` section).
এখানে TODO(my_dataset) অনুসন্ধান করুন এবং সেই অনুযায়ী সংশোধন করুন।
ডেটাসেটের উদাহরণ
সমস্ত ডেটাসেট tfds.core.DatasetBuilder এর সাবক্লাস প্রয়োগ করা হয়, যা বেশিরভাগ বয়লারপ্লেটের যত্ন নেয়। এটি সমর্থন করে:
- ছোট/মাঝারি ডেটাসেট যা একটি একক মেশিনে তৈরি করা যেতে পারে (এই টিউটোরিয়াল)।
- খুব বড় ডেটাসেট যার জন্য ডিস্ট্রিবিউটেড জেনারেশন প্রয়োজন ( Apache Beam ব্যবহার করে, আমাদের বিশাল ডেটাসেট গাইড দেখুন)
এখানে একটি ডেটাসেট নির্মাতার একটি ন্যূনতম উদাহরণ রয়েছে যা tfds.core.GeneratorBasedBuilder এর উপর ভিত্তি করে:
class Builder(tfds.core.GeneratorBasedBuilder):
"""DatasetBuilder for my_dataset dataset."""
VERSION = tfds.core.Version('1.0.0')
RELEASE_NOTES = {
'1.0.0': 'Initial release.',
}
def _info(self) -> tfds.core.DatasetInfo:
"""Dataset metadata (homepage, citation,...)."""
return self.dataset_info_from_configs(
features=tfds.features.FeaturesDict({
'image': tfds.features.Image(shape=(256, 256, 3)),
'label': tfds.features.ClassLabel(
names=['no', 'yes'],
doc='Whether this is a picture of a cat'),
}),
)
def _split_generators(self, dl_manager: tfds.download.DownloadManager):
"""Download the data and define splits."""
extracted_path = dl_manager.download_and_extract('http://data.org/data.zip')
# dl_manager returns pathlib-like objects with `path.read_text()`,
# `path.iterdir()`,...
return {
'train': self._generate_examples(path=extracted_path / 'train_images'),
'test': self._generate_examples(path=extracted_path / 'test_images'),
}
def _generate_examples(self, path) -> Iterator[Tuple[Key, Example]]:
"""Generator of examples for each split."""
for img_path in path.glob('*.jpeg'):
# Yields (key, example)
yield img_path.name, {
'image': img_path,
'label': 'yes' if img_path.name.startswith('yes_') else 'no',
}
মনে রাখবেন, কিছু নির্দিষ্ট ডেটা ফরম্যাটের জন্য, বেশিরভাগ ডেটা প্রক্রিয়াকরণের যত্ন নেওয়ার জন্য আমরা ব্যবহার করার জন্য প্রস্তুত ডেটাসেট নির্মাতা সরবরাহ করি।
ওভাররাইট করার 3টি বিমূর্ত পদ্ধতি বিস্তারিতভাবে দেখুন।
_info : ডেটাসেট মেটাডেটা
_info ডেটাসেট মেটাডেটা ধারণকারী tfds.core.DatasetInfo প্রদান করে।
def _info(self):
# The `dataset_info_from_configs` base method will construct the
# `tfds.core.DatasetInfo` object using the passed-in parameters and
# adding: builder (self), description/citations/tags from the config
# files located in the same package.
return self.dataset_info_from_configs(
homepage='https://dataset-homepage.org',
features=tfds.features.FeaturesDict({
'image_description': tfds.features.Text(),
'image': tfds.features.Image(),
# Here, 'label' can be 0-4.
'label': tfds.features.ClassLabel(num_classes=5),
}),
# If there's a common `(input, target)` tuple from the features,
# specify them here. They'll be used if as_supervised=True in
# builder.as_dataset.
supervised_keys=('image', 'label'),
# Specify whether to disable shuffling on the examples. Set to False by default.
disable_shuffling=False,
)
বেশিরভাগ ক্ষেত্র স্ব-ব্যাখ্যামূলক হওয়া উচিত। কিছু নির্ভুলতা:
-
features: এটি ডেটাসেট গঠন, আকৃতি,... জটিল ডেটা প্রকারগুলিকে সমর্থন করে (অডিও, ভিডিও, নেস্টেড সিকোয়েন্স,...)। আরও তথ্যের জন্য উপলব্ধ বৈশিষ্ট্য বা বৈশিষ্ট্য সংযোগকারী নির্দেশিকা দেখুন। -
disable_shuffling: বিভাগ দেখুন ডেটাসেট অর্ডার বজায় রাখুন ।
BibText CITATIONS.bib ফাইল লেখা:
- উদ্ধৃতি নির্দেশের জন্য ডেটাসেট ওয়েবসাইট অনুসন্ধান করুন (বিবটেক্স ফর্ম্যাটে এটি ব্যবহার করুন)।
- arXiv কাগজপত্রের জন্য: কাগজটি খুঁজুন এবং ডানদিকে
BibTextলিঙ্কে ক্লিক করুন। - Google Scholar- এ কাগজটি খুঁজুন এবং শিরোনামের নিচে ডবল-উদ্ধৃতি চিহ্নে ক্লিক করুন এবং পপআপে
BibTeXএ ক্লিক করুন। - যদি কোন সংশ্লিষ্ট কাগজ না থাকে (উদাহরণস্বরূপ, শুধুমাত্র একটি ওয়েবসাইট আছে), আপনি একটি কাস্টম BibTeX এন্ট্রি তৈরি করতে BibTeX অনলাইন সম্পাদক ব্যবহার করতে পারেন (ড্রপ-ডাউন মেনুতে একটি
Onlineএন্ট্রি টাইপ আছে)।
TAGS.txt ফাইল আপডেট করা হচ্ছে:
- সমস্ত অনুমোদিত ট্যাগ জেনারেট করা ফাইলে প্রাক-ভরা হয়।
- ডেটাসেটে প্রযোজ্য নয় এমন সমস্ত ট্যাগ সরান।
- বৈধ ট্যাগগুলি tensorflow_datasets/core/valid_tags.txt- এ তালিকাভুক্ত করা হয়েছে।
- সেই তালিকায় একটি ট্যাগ যোগ করতে, অনুগ্রহ করে একটি PR পাঠান।
ডেটাসেটের ক্রম বজায় রাখুন
ডিফল্টরূপে, ডেটাসেটগুলির রেকর্ডগুলিকে সংরক্ষিত করার জন্য সংরক্ষিত করা হয় যাতে ডেটাসেট জুড়ে ক্লাসগুলির বিতরণকে আরও অভিন্ন করে তোলা যায়, যেহেতু প্রায়শই একই শ্রেণীর অন্তর্গত রেকর্ডগুলি সংলগ্ন থাকে। _generate_examples দ্বারা প্রদত্ত কী দ্বারা ডেটাসেটটি বাছাই করা উচিত তা নির্দিষ্ট করার জন্য ক্ষেত্র disable_shuffling True তে সেট করা উচিত। ডিফল্টরূপে এটি False এ সেট করা থাকে।
def _info(self):
return self.dataset_info_from_configs(
# [...]
disable_shuffling=True,
# [...]
)
মনে রাখবেন যে শাফলিং অক্ষম করার কার্যক্ষমতার প্রভাব রয়েছে কারণ শার্ডগুলি আর সমান্তরালভাবে পড়া যাবে না।
_split_generators : ডাটা ডাউনলোড এবং স্প্লিট করে
ডাউনলোড এবং উৎস তথ্য নিষ্কাশন
বেশিরভাগ ডেটাসেটকে ওয়েব থেকে ডেটা ডাউনলোড করতে হবে। এটি _split_generators এর tfds.download.DownloadManager ইনপুট আর্গুমেন্ট ব্যবহার করে করা হয়। dl_manager নিম্নলিখিত পদ্ধতি রয়েছে:
-
download:http(s)://,ftp(s)://সমর্থন করে -
extract: বর্তমানে.zip,.gzএবং.tarফাইল সমর্থন করে। -
download_and_extract:dl_manager.extract(dl_manager.download(urls))এর মতই
এই সমস্ত পদ্ধতি tfds.core.Path ( epath.Path এর জন্য উপনাম) প্রদান করে, যা pathlib.Path-এর মতো বস্তু।
এই পদ্ধতিগুলি নির্বিচারে নেস্টেড কাঠামো সমর্থন করে ( list , dict ), যেমন:
extracted_paths = dl_manager.download_and_extract({
'foo': 'https://example.com/foo.zip',
'bar': 'https://example.com/bar.zip',
})
# This returns:
assert extracted_paths == {
'foo': Path('/path/to/extracted_foo/'),
'bar': Path('/path/extracted_bar/'),
}
ম্যানুয়াল ডাউনলোড এবং নিষ্কাশন
কিছু ডেটা স্বয়ংক্রিয়ভাবে ডাউনলোড করা যায় না (যেমন একটি লগইন প্রয়োজন), এই ক্ষেত্রে, ব্যবহারকারী ম্যানুয়ালি সোর্স ডেটা ডাউনলোড করবে এবং manual_dir/ (ডিফল্ট ~/tensorflow_datasets/downloads/manual/ ) এ রাখবে।
ফাইলগুলি dl_manager.manual_dir এর মাধ্যমে অ্যাক্সেস করা যেতে পারে:
class MyDataset(tfds.core.GeneratorBasedBuilder):
MANUAL_DOWNLOAD_INSTRUCTIONS = """
Register into https://example.org/login to get the data. Place the `data.zip`
file in the `manual_dir/`.
"""
def _split_generators(self, dl_manager):
# data_path is a pathlib-like `Path('<manual_dir>/data.zip')`
archive_path = dl_manager.manual_dir / 'data.zip'
# Extract the manually downloaded `data.zip`
extracted_path = dl_manager.extract(archive_path)
...
manual_dir অবস্থানটি tfds build --manual_dir= অথবা tfds.download.DownloadConfig ব্যবহার করে কাস্টমাইজ করা যেতে পারে।
সরাসরি আর্কাইভ পড়ুন
dl_manager.iter_archive একটি আর্কাইভকে ক্রমানুসারে বের না করেই পড়ে। এটি স্টোরেজ স্পেস বাঁচাতে পারে এবং কিছু ফাইল সিস্টেমে পারফরম্যান্স উন্নত করতে পারে।
for filename, fobj in dl_manager.iter_archive('path/to/archive.zip'):
...
fobj with open('rb') as fobj: (যেমন fobj.read() )
ডেটাসেট বিভাজন নির্দিষ্ট করা
যদি ডেটাসেট পূর্ব-নির্ধারিত বিভাজনের সাথে আসে (যেমন MNIST train এবং test স্প্লিট আছে), সেগুলি রাখুন। অন্যথায়, শুধুমাত্র একটি একক all বিভক্ত উল্লেখ করুন। ব্যবহারকারীরা সাবস্প্লিট API (যেমন split='train[80%:]' ) দিয়ে গতিশীলভাবে তাদের নিজস্ব সাবস্প্লিট তৈরি করতে পারে। উল্লেখ্য যে কোনো বর্ণানুক্রমিক স্ট্রিং বিভক্ত নাম হিসাবে ব্যবহার করা যেতে পারে, উপরে উল্লিখিত all ছাড়াও।
def _split_generators(self, dl_manager):
# Download source data
extracted_path = dl_manager.download_and_extract(...)
# Specify the splits
return {
'train': self._generate_examples(
images_path=extracted_path / 'train_imgs',
label_path=extracted_path / 'train_labels.csv',
),
'test': self._generate_examples(
images_path=extracted_path / 'test_imgs',
label_path=extracted_path / 'test_labels.csv',
),
}
_generate_examples : উদাহরণ জেনারেটর
_generate_examples উৎস ডেটা থেকে প্রতিটি বিভাজনের উদাহরণ তৈরি করে।
এই পদ্ধতিটি সাধারণত সোর্স ডেটাসেট আর্টিফ্যাক্টগুলি (যেমন একটি CSV ফাইল) এবং ফলন (key, feature_dict) টিপলগুলি পড়বে:
-
key: উদাহরণ শনাক্তকারী।hash(key)ব্যবহার করে উদাহরণগুলিকে নির্ধারকভাবে শাফেল করতে বা শাফলিং অক্ষম করার সময় কী দ্বারা সাজানোর জন্য ব্যবহৃত হয় (বিভাগ দেখুন ডেটাসেট ক্রম বজায় রাখুন )। হওয়া উচিত:- অনন্য : দুটি উদাহরণ একই কী ব্যবহার করলে, একটি ব্যতিক্রম উত্থাপিত হবে।
- deterministic :
download_dir,os.path.listdirঅর্ডারের উপর নির্ভর করা উচিত নয়,... দুইবার ডেটা জেনারেট করলে একই কী পাওয়া উচিত। - তুলনীয় : শাফলিং অক্ষম থাকলে ডেটাসেট সাজানোর জন্য কী ব্যবহার করা হবে।
-
feature_dict: উদাহরণের মান সম্বলিত একটিdict।- কাঠামোটি
tfds.core.DatasetInfoএ সংজ্ঞায়িতfeatures=কাঠামোর সাথে মেলে। - জটিল ডেটা প্রকারগুলি (ছবি, ভিডিও, অডিও,...) স্বয়ংক্রিয়ভাবে এনকোড করা হবে৷
- প্রতিটি বৈশিষ্ট্য প্রায়শই একাধিক ইনপুট প্রকার গ্রহণ করে (যেমন ভিডিও গ্রহণ
/path/to/vid.mp4,np.array(shape=(l, h, w, c)),List[paths],List[np.array(shape=(h, w, c)],List[img_bytes],...) - আরও তথ্যের জন্য বৈশিষ্ট্য সংযোগকারী নির্দেশিকা দেখুন।
- কাঠামোটি
def _generate_examples(self, images_path, label_path):
# Read the input data out of the source files
with label_path.open() as f:
for row in csv.DictReader(f):
image_id = row['image_id']
# And yield (key, feature_dict)
yield image_id, {
'image_description': row['description'],
'image': images_path / f'{image_id}.jpeg',
'label': row['label'],
}
ফাইল অ্যাক্সেস এবং tf.io.gfile
ক্লাউড স্টোরেজ সিস্টেমকে সমর্থন করার জন্য, পাইথন বিল্ট-ইন I/O অপ্স ব্যবহার এড়িয়ে চলুন।
পরিবর্তে, dl_manager Google ক্লাউড স্টোরেজের সাথে সরাসরি সামঞ্জস্যপূর্ণ pathlib-এর মতো বস্তু ফেরত দেয়:
path = dl_manager.download_and_extract('http://some-website/my_data.zip')
json_path = path / 'data/file.json'
json.loads(json_path.read_text())
বিকল্পভাবে, ফাইল অপারেশনের জন্য অন্তর্নির্মিত পরিবর্তে tf.io.gfile API ব্যবহার করুন:
-
open->tf.io.gfile.GFile -
os.rename->tf.io.gfile.rename - ...
পাথলিবকে tf.io.gfile এ অগ্রাধিকার দেওয়া উচিত ( যৌক্তিক দেখুন।
অতিরিক্ত নির্ভরতা
কিছু ডেটাসেট শুধুমাত্র প্রজন্মের সময় অতিরিক্ত পাইথন নির্ভরতা প্রয়োজন। উদাহরণস্বরূপ, SVHN ডেটাসেট কিছু ডেটা লোড করতে scipy ব্যবহার করে।
আপনি যদি TFDS সংগ্রহস্থলে ডেটাসেট যোগ করে থাকেন, তাহলে tensorflow-datasets প্যাকেজ ছোট রাখতে tfds.core.lazy_imports ব্যবহার করুন। ব্যবহারকারীরা শুধুমাত্র প্রয়োজন অনুযায়ী অতিরিক্ত নির্ভরতা ইনস্টল করবে।
lazy_imports ব্যবহার করতে:
-
setup.pyএDATASET_EXTRASএ আপনার ডেটাসেটের জন্য একটি এন্ট্রি যোগ করুন। এটি এমন করে যাতে ব্যবহারকারীরা অতিরিক্ত নির্ভরতা ইনস্টল করতেpip install 'tensorflow-datasets[svhn]'পারে। -
LazyImporterএবংLazyImportsTestএ আপনার আমদানির জন্য একটি এন্ট্রি যোগ করুন। - আপনার
DatasetBuilderএ নির্ভরতা অ্যাক্সেস করতেtfds.core.lazy_importsব্যবহার করুন (উদাহরণস্বরূপ,tfds.core.lazy_imports.scipy)।
দূষিত তথ্য
কিছু ডেটাসেট পুরোপুরি পরিষ্কার নয় এবং এতে কিছু দূষিত ডেটা থাকে (উদাহরণস্বরূপ, ছবিগুলি JPEG ফাইলে আছে কিন্তু কিছু অবৈধ JPEG)। এই উদাহরণগুলি এড়িয়ে যাওয়া উচিত, কিন্তু কতগুলি উদাহরণ বাদ দেওয়া হয়েছে এবং কেন তা ডেটাসেটের বিবরণে একটি নোট রাখুন৷
ডেটাসেট কনফিগারেশন/ভেরিয়েন্ট (tfds.core.BuilderConfig)
কিছু ডেটাসেটের একাধিক রূপ থাকতে পারে, বা ডেটা কীভাবে প্রিপ্রসেস করা হয় এবং ডিস্কে লেখা হয় তার বিকল্প থাকতে পারে। উদাহরণস্বরূপ, cycle_gan-এর প্রতি বস্তু জোড়ায় একটি কনফিগারেশন রয়েছে ( cycle_gan/horse2zebra , cycle_gan/monet2photo ,...)।
এটি tfds.core.BuilderConfig এর মাধ্যমে করা হয়:
আপনার কনফিগারেশন অবজেক্টটিকে
tfds.core.BuilderConfigএর একটি সাবক্লাস হিসাবে সংজ্ঞায়িত করুন। উদাহরণস্বরূপ,MyDatasetConfig।@dataclasses.dataclass class MyDatasetConfig(tfds.core.BuilderConfig): img_size: Tuple[int, int] = (0, 0)MyDatasetএBUILDER_CONFIGS = []ক্লাস মেম্বারকে সংজ্ঞায়িত করুন যাMyDatasetConfigএর তালিকা করে যা ডেটাসেট প্রকাশ করে।class MyDataset(tfds.core.GeneratorBasedBuilder): VERSION = tfds.core.Version('1.0.0') # pytype: disable=wrong-keyword-args BUILDER_CONFIGS = [ # `name` (and optionally `description`) are required for each config MyDatasetConfig(name='small', description='Small ...', img_size=(8, 8)), MyDatasetConfig(name='big', description='Big ...', img_size=(32, 32)), ] # pytype: enable=wrong-keyword-argsডেটা জেনারেশন কনফিগার করতে
MyDatasetএself.builder_configব্যবহার করুন (যেমনshape=self.builder_config.img_size)। এর মধ্যে_info()এ বিভিন্ন মান সেট করা বা ডাউনলোড ডেটা অ্যাক্সেস পরিবর্তন করা অন্তর্ভুক্ত থাকতে পারে।
নোট:
- প্রতিটি কনফিগারেশন একটি অনন্য নাম আছে. একটি কনফিগারেশনের সম্পূর্ণ যোগ্য নাম হল
dataset_name/config_name(যেমনcoco/2017)। - যদি নির্দিষ্ট না করা হয়,
BUILDER_CONFIGSএ প্রথম কনফিগারেশন ব্যবহার করা হবে (যেমনtfds.load('c4')ডিফল্টc4/en)
BuilderConfig s ব্যবহার করে এমন একটি ডেটাসেটের উদাহরণের জন্য anli দেখুন।
সংস্করণ
সংস্করণ দুটি ভিন্ন অর্থ উল্লেখ করতে পারে:
- "বাহ্যিক" মূল ডেটা সংস্করণ: যেমন COCO v2019, v2017,...
- "অভ্যন্তরীণ" TFDS কোড সংস্করণ: যেমন
tfds.features.FeaturesDictএ একটি বৈশিষ্ট্যের নাম পরিবর্তন করুন,_generate_examplesএ একটি বাগ সংশোধন করুন
একটি ডেটাসেট আপডেট করতে:
- "বাহ্যিক" ডেটা আপডেটের জন্য: একাধিক ব্যবহারকারী একই সাথে একটি নির্দিষ্ট বছর/সংস্করণ অ্যাক্সেস করতে চাইতে পারেন। এটি প্রতি সংস্করণে একটি
tfds.core.BuilderConfigব্যবহার করে (যেমনcoco/2017,coco/2019) বা সংস্করণ প্রতি একটি ক্লাস (যেমনVoc2007,Voc2012) ব্যবহার করে করা হয়। - "অভ্যন্তরীণ" কোড আপডেটের জন্য: ব্যবহারকারীরা শুধুমাত্র সাম্প্রতিক সংস্করণ ডাউনলোড করে। যেকোন কোড আপডেটের
VERSIONক্লাস অ্যাট্রিবিউট (যেমন1.0.0থেকেVERSION = tfds.core.Version('2.0.0')) শব্দার্থিক সংস্করণ অনুসরণ করা উচিত।
নিবন্ধনের জন্য একটি আমদানি যোগ করুন
tfds.load , tfds.builder এ স্বয়ংক্রিয়ভাবে নিবন্ধিত হতে আপনার প্রকল্প __init__ এ ডেটাসেট মডিউল আমদানি করতে ভুলবেন না।
import my_project.datasets.my_dataset # Register MyDataset
ds = tfds.load('my_dataset') # MyDataset available
উদাহরণ স্বরূপ, আপনি যদি tensorflow/datasets এ অবদান রাখেন, তাহলে মডিউলটি এর সাবডিরেক্টরির __init__.py এ যোগ করুন (যেমন image/__init__.py .
সাধারণ বাস্তবায়ন gotchas জন্য পরীক্ষা করুন
সাধারণ বাস্তবায়ন gotchas জন্য চেক করুন.
আপনার ডেটাসেট পরীক্ষা করুন
ডাউনলোড করুন এবং প্রস্তুত করুন: tfds build
ডেটাসেট তৈরি করতে, my_dataset/ ডিরেক্টরি থেকে tfds build চালান:
cd path/to/datasets/my_dataset/
tfds build --register_checksums
উন্নয়নের জন্য কিছু দরকারী পতাকা:
-
--pdb: কোনো ব্যতিক্রম উত্থাপিত হলে ডিবাগিং মোডে প্রবেশ করুন। -
--overwrite: বিদ্যমান ফাইলগুলি মুছুন যদি ডেটাসেটটি ইতিমধ্যে তৈরি হয়ে থাকে। -
--max_examples_per_split: সম্পূর্ণ ডেটাসেটের পরিবর্তে শুধুমাত্র প্রথম X উদাহরণ (ডিফল্ট 1) তৈরি করুন। -
--register_checksums: ডাউনলোড করা ইউআরএলের চেকসাম রেকর্ড করুন। শুধুমাত্র বিকাশের সময় ব্যবহার করা উচিত।
পতাকার সম্পূর্ণ তালিকার জন্য CLI ডকুমেন্টেশন দেখুন।
চেকসাম
আপনার ডেটাসেটের চেকসাম রেকর্ড করার পরামর্শ দেওয়া হচ্ছে নির্ধারকতা নিশ্চিত করার জন্য, ডকুমেন্টেশনে সাহায্য করার জন্য,... এটি --register_checksums (আগের বিভাগ দেখুন) দিয়ে ডেটাসেট তৈরি করে করা হয়।
আপনি যদি PyPI এর মাধ্যমে আপনার ডেটাসেট প্রকাশ করেন, তাহলে checksums.tsv ফাইলগুলি (যেমন আপনার setup.py এর package_data এ) রপ্তানি করতে ভুলবেন না।
ইউনিট-পরীক্ষা আপনার ডেটাসেট
tfds.testing.DatasetBuilderTestCase হল একটি বেস TestCase যা সম্পূর্ণরূপে একটি ডেটাসেট ব্যবহার করতে পারে। এটি পরীক্ষার ডেটা হিসাবে "ডামি ডেটা" ব্যবহার করে যা উত্স ডেটাসেটের কাঠামোর অনুকরণ করে।
- পরীক্ষার ডেটা
my_dataset/dummy_data/ডিরেক্টরিতে রাখা উচিত এবং ডাউনলোড এবং নিষ্কাশিত হিসাবে উৎস ডেটাসেট শিল্পকর্মের অনুকরণ করা উচিত। এটি একটি স্ক্রিপ্ট ( উদাহরণস্বরূপ স্ক্রিপ্ট ) দিয়ে ম্যানুয়ালি বা স্বয়ংক্রিয়ভাবে তৈরি করা যেতে পারে। - আপনার টেস্ট ডেটা স্প্লিটে বিভিন্ন ডেটা ব্যবহার করা নিশ্চিত করুন, কারণ আপনার ডেটাসেট স্প্লিট ওভারল্যাপ হলে পরীক্ষা ব্যর্থ হবে।
- পরীক্ষার ডেটাতে কোনও কপিরাইটযুক্ত উপাদান থাকা উচিত নয় । সন্দেহ হলে, মূল ডেটাসেট থেকে উপাদান ব্যবহার করে ডেটা তৈরি করবেন না।
import tensorflow_datasets as tfds
from . import my_dataset_dataset_builder
class MyDatasetTest(tfds.testing.DatasetBuilderTestCase):
"""Tests for my_dataset dataset."""
DATASET_CLASS = my_dataset_dataset_builder.Builder
SPLITS = {
'train': 3, # Number of fake train example
'test': 1, # Number of fake test example
}
# If you are calling `download/download_and_extract` with a dict, like:
# dl_manager.download({'some_key': 'http://a.org/out.txt', ...})
# then the tests needs to provide the fake output paths relative to the
# fake data directory
DL_EXTRACT_RESULT = {
'name1': 'path/to/file1', # Relative to my_dataset/dummy_data dir.
'name2': 'file2',
}
if __name__ == '__main__':
tfds.testing.test_main()
ডেটাসেট পরীক্ষা করতে নিম্নলিখিত কমান্ডটি চালান।
python my_dataset_test.py
আমাদের প্রতিক্রিয়া পাঠান
আমরা ক্রমাগত ডেটাসেট তৈরির কর্মপ্রবাহ উন্নত করার চেষ্টা করছি, কিন্তু আমরা সমস্যাগুলি সম্পর্কে সচেতন হলেই তা করতে পারি। ডেটাসেট তৈরি করার সময় আপনি কোন সমস্যা বা ত্রুটির সম্মুখীন হয়েছেন? এমন একটি অংশ ছিল যা বিভ্রান্তিকর ছিল, বা প্রথমবার কাজ করছিল না?
GitHub এ আপনার মতামত শেয়ার করুন.