Aiuto proteggere la Grande Barriera Corallina con tensorflow sul Kaggle Join Sfida

FeatureConnector

Il tfds.features.FeatureConnector API:

  • Definisce la struttura, le forme, dtypes della finale tf.data.Dataset
  • Serializzazione via astratta su/da disco.
  • Esporre metadati aggiuntivi (ad es. nomi di etichette, frequenza di campionamento audio,...)

Panoramica

tfds.features.FeatureConnector definisce la struttura caratteristiche del set di dati (in 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,
        },
    }),
)

Le caratteristiche possono essere:

Durante la generazione, gli esempi vengono serializzati automaticamente da FeatureConnector.encode_example in un formato adatto a disco (attualmente tf.train.Example buffer di protocollo):

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',
    },
}

Durante la lettura del set di dati (ad esempio con tfds.load ), i dati vengono automtically decodificata con FeatureConnector.decode_example . La tornato tf.data.Dataset corrisponderà al dict struttura definita in 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),
    },
}

Serializza/deserializza in proto

TFDS espongono un'API di basso livello per esempi serializzare / deserializzare a tf.train.Example proto.

Per serializzare dict[np.ndarray | Path | str | ...] al proto bytes , uso features.serialize_example :

with tf.io.TFRecordWriter('path/to/file.tfrecord') as writer:
  for ex in all_exs:
    ex_bytes = features.serialize_example(data)
    f.write(ex_bytes)

Per deserializzare al proto bytes a tf.Tensor , uso features.deserialize_example :

ds = tf.data.TFRecordDataset('path/to/file.tfrecord')
ds = ds.map(features.deserialize_example)

Accesso ai metadati

Vedere il doc introduzione per accedere alle funzioni di metadati (nomi delle etichette, forma, DTYPE, ...). Esempio:

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

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

Crea il tuo tfds.features.FeatureConnector

Se ritieni che una caratteristica non è presente nella funzionalità disponibili , si prega di aprire una nuova emissione .

Per creare il proprio connettore funzione, è necessario ereditare da tfds.features.FeatureConnector e implementare i metodi astratti.

  • Se la funzione è un singolo valore tensore, è meglio ereditare da tfds.features.Tensor e l'uso super() quando necessario. Vedere tfds.features.BBoxFeature codice sorgente per un esempio.
  • Se la funzione è un contenitore di molteplici tensori, è meglio ereditare da tfds.features.FeaturesDict e utilizzare il super() per automaticamente in codice sub-connettori.

Il tfds.features.FeatureConnector oggetto astrae come la funzione è codificato sul disco da come viene presentato all'utente. Sotto è un diagramma che mostra i livelli di astrazione del set di dati e la trasformazione dai file set di dati grezzi al tf.data.Dataset oggetto.

Livelli di astrazione di DatasetBuilder

Per creare il proprio connettore caratteristica, sottoclasse tfds.features.FeatureConnector e implementare i metodi astratti:

  • encode_example(data) : Definisce come codificare i dati riportati nel generatore _generate_examples() in un tf.train.Example dati compatibili. Può restituire un singolo valore, o un dict di valori.
  • decode_example(data) : Definisce come decodificare i dati dal tensore letta da tf.train.Example in tensore utente restituito da tf.data.Dataset .
  • get_tensor_info() : indica la forma / DTYPE del tensore (s) restituito da tf.data.Dataset . Può essere facoltativo se ereditare da un altro tfds.features .
  • (opzionalmente) get_serialized_info() : Se le informazioni restituito da get_tensor_info() è diverso da come i dati sono effettivamente scritti sul disco, allora avete bisogno di sovrascrittura get_serialized_info() per soddisfare le specifiche del tf.train.Example
  • to_json_content / from_json_content : Questo è necessario per consentire al gruppo di dati da caricare, senza il codice sorgente originale. Vedere funzione Audio per un esempio.

Per ulteriori informazioni, dare un'occhiata a tfds.features.FeatureConnector documentazione. E 'anche meglio guardare esempi reali .