FeatureConnector
tfds.features.FeatureConnector API:
最終的な
tf.data.Datasetの構造、形状、dtypes を定義します。ディスクとの間のシリアル化を抽象化します。
追加メタデータ(ラベル名、音声サンプルレートなど)を公開します。
概要
tfds.features.FeatureConnector は、データセットの特徴量の構造を定義します(tfds.core.DatasetInfo 内):
特徴量は、テキストによる説明(doc='description')を使用するか、tfds.features.Documentation を直接使用してさらに詳細な特徴量の説明を提供することで、文書化できます。
以下のような特徴量を含められます。
スカラー値:
tf.bool、tf.string、tf.float32など。特徴量を文書化する場合、tfds.features.Scalar(tf.int64, doc='description')も使用できます。tfds.features.Audio、tfds.features.Videoなど(使用可能な特徴量のリストをご覧ください)特徴量のネストされた
dict:{'metadata': {'image': Image(), 'description': tf.string}}などネストされた
tfds.features.Sequence:Sequence({'image': ..., 'id': ...})、Sequence(Sequence(tf.int64))など
生成中、この例は FeatureConnector.encode_example によって自動的にディスクに最適なフォーマットにシリアル化されます(現在は tf.train.Example プロトコルバッファ)。
データセットを読み取る場合(tfds.load などを私用)、データは FeatureConnector.decode_example によって自動的にデコードされます。戻される tf.data.Dataset は、tfds.core.DatasetInfo に定義された dict 構造に一致します。
proto のシリアル化と逆シリアル化
TFDS は、例を tf.train.Example proto にシリアル化/逆シリアル化するための低レベル API を公開します。
dict[np.ndarray | Path | str | ...] を proto bytes にシリアル化するには、features.serialize_example を使用します。
proto bytes を tf.Tensor に逆シリアル化するには、features.deserialize_example を使用します。
メタデータにアクセスする
特徴量メタデータ(ラベル名、形状、dtype など)にアクセスするには、基礎ドキュメントをご覧ください。以下に例を示します。
独自の tfds.features.FeatureConnector を作成する
利用可能な特徴量に特徴量が見当たらない場合は、新しい課題を送信してください。
独自の特徴量コネクタを作成するには、tfds.features.FeatureConnector から継承し、抽象メソッドを実装する必要があります。
特徴量が単一のテンソル値である場合、
tfds.features.Tensorから継承して、必要に応じてsuper()を使用するのが最善です。例については、tfds.features.BBoxFeatureのソースコードをご覧ください。特徴量が複数のテンソルのコンテナである場合、
tfds.features.FeaturesDictから継承して、super()を使用して自動的にサブコネクタをエンコードするのが最善です。
tfds.features.FeatureConnector オブジェクトは、特徴慮がユーザーに提供される方法から、特徴量をディスクにエンコードする方法を抽象化します。次の図は、データセットの抽象レイヤーと、生のデータセットファイルから tf.data.Dataset オブジェクトへの変換を示します。

独自の特徴量コネクタを作成するには、tfds.features.FeatureConnector をサブクラス化し、抽象メソッドを実装します。
encode_example(data): ジェネレータ_generate_examples()に指定されたデータをtf.train.Example対応データにエンコードする方法を定義します。単一の値、または複数の値のdictを返します。decode_example(data):tf.train.Exampleから読み取られたテンソルからtf.data.Datasetが返すユーザーテンソルにデータをデコードする方法を定義します。get_tensor_info():tf.data.Datasetによって返されたテンソルの形状/dtype を示します。別のtfds.featuresから継承する場合はオプションの場合があります。(オプション)
get_serialized_info():get_tensor_info()から返された情報がディスクに実際に書き込まれたものと異なる場合、get_serialized_info()を、tf.train.Exampleの仕様に一致するにように上書きする必要があります。to_json_content/from_json_content: これは、元のソースコードなしでデータセットを読み込む場合に必須です。例については、音声特徴量をご覧ください。
注意: 作成した特徴量コネクタは、self.assertFeature と tfds.testing.FeatureExpectationItem を使って必ずテストしてください。テスト例をご覧ください。
詳細については、tfds.features.FeatureConnector ドキュメントをご覧ください。実際の例を見ることもお勧めします。