MLコミュニティデーは11月9日です! TensorFlow、JAXからの更新のために私たちに参加し、より多くの詳細をご覧ください

FeatureConnector

tfds.features.FeatureConnector API:

  • 最終的なtf.data.Datasetの構造、形状、dtypeを定義しtf.data.Dataset
  • ディスクとの間のシリアル化を抽象化します。
  • 追加のメタデータ(ラベル名、オーディオサンプルレートなど)を公開します

概要概要

tfds.features.FeatureConnectorは、データセット機能の構造を定義します( tfds.core.DatasetInfo )。

tfds.core.DatasetInfo(
    features=tfds.features.FeaturesDict({
        'image': tfds.features.Image(shape=(28, 28, 1)),
        'label': tfds.features.ClassLabel(names=['no', 'yes']),
        'metadata': {
            'id': tf.int64,
            'language': tf.string,
        },
    }),
)

機能は次のとおりです。

生成中に、サンプルはFeatureConnector.encode_exampleによってディスクに適した形式(現在はtf.train.Exampleプロトコルバッファ)に自動的にシリアル化されます。

yield {
    'image': '/path/to/img0.png',  # `np.array`, file bytes,... also accepted
    'label': 'yes',  # int (0-num_classes) also accepted
    'metadata': {
        'id': 43,
        'language': 'en',
    },
}

データセットを読み取るとき(たとえば、 tfds.load )、データはFeatureConnector.decode_example自動的にデコードされます。返されるtf.data.Datasetは、 tfds.core.DatasetInfo定義されているdict構造と一致しtfds.core.DatasetInfo

ds = tfds.load(...)
ds.element_spec == {
    'image': tf.TensorSpec(shape=(28, 28, 1), tf.uint8),
    'label': tf.TensorSpec(shape=(), tf.int64),
    'metadata': {
        'id': tf.TensorSpec(shape=(), tf.int64),
        'language': tf.TensorSpec(shape=(), tf.string),
    },
}

メタデータにアクセスする

機能のメタデータ(ラベル名、形状、dtypeなど)にアクセスするには、紹介ドキュメントを参照してください。例:

ds, info = tfds.load(..., with_info=True)

info.features['label'].names  # ['cat', 'dog', ...]
info.features['label'].str2int('cat')  # 0

独自のtfds.features.FeatureConnector作成します

利用可能な機能に機能が不足していると思われる場合は、新しい問題を開いてください。

独自の機能コネクタを作成するには、 tfds.features.FeatureConnectorから継承し、抽象メソッドを実装する必要があります。

  • 機能が単一のテンソル値である場合は、 tfds.features.Tensorから継承し、必要に応じてsuper()を使用することをおtfds.features.Tensorします。例については、 tfds.features.BBoxFeatureソースコードを参照してください。
  • フィーチャーが複数のテンソルのコンテナーである場合は、 tfds.features.FeaturesDictから継承し、 super()を使用してサブコネクターを自動的にエンコードするのが最善です。

tfds.features.FeatureConnectorオブジェクトは、機能がディスク上でどのようにエンコードされているかを、ユーザーに提示する方法から抽象化します。以下は、データセットの抽象化レイヤーと、生のデータセットファイルからtf.data.Datasetオブジェクトへの変換を示す図です。

DatasetBuilder抽象化レイヤー

独自の機能コネクタを作成するには、 tfds.features.FeatureConnectorをサブクラス化し、抽象メソッドを実装します。

  • encode_example(data) :ジェネレーター_generate_examples()されたデータをtf.train.Example互換データにエンコードする方法を定義します。単一の値、または値のdictを返すことができます。
  • decode_example(data) :テンソルからデータを復号化する方法を定義するには、から読み取るtf.train.Exampleによって返されたユーザーテンソルにtf.data.Dataset
  • get_tensor_info()によって返さテンソル(S)の形状/ DTYPE示しtf.data.Dataset 。別のtfds.featuresから継承する場合は、オプションの場合があります。
  • (オプション) get_serialized_info()情報がで返される場合get_tensor_info()データが実際にディスクに書かれている方法とは異なり、あなたは上書きする必要があるget_serialized_info()のスペックと一致するようにtf.train.Example
  • to_json_content / from_json_content :これは、元のソースコードなしでデータセットをロードできるようにするために必要です。例については、 オーディオ機能を参照してください。

詳細については、 tfds.features.FeatureConnectorドキュメントを参照してtfds.features.FeatureConnector 。また、実際の例を確認することをお勧めします