Cheat-Sheet: Umrechnung unterschiedlicher Struktur-Typen

Numpy-Array zu Tensor und zurück.

np_array = np.array([[1, 2], [3, 4]])
tf_tensor = tf.convert_to_tensor(np_array)

back_to_numpy = tf_tensor.numpy()

Tensor zu Dataset und zurück

t = tf.constant([[1, 2], [3, 4], [5, 6]])
ds = tf.data.Dataset.from_tensor_slices(t)

# Dataset ist eine Sammlung von Tensoren
tensor_back = tf.stack(list(ds))

Numpy-Array zu Dataset und zurück

t = tf.constant([[1, 2], [3, 4], [5, 6]])
ds = tf.data.Dataset.from_tensor_slices(t)   # Dataset enthält nun 3 Einträge!

restored = tf.stack([x for x in ds]Dat)

Dataset zu TF-Record und zurück (man muss die Struktur (Features) der gespeicherten Daten kennen, um sie korrekt zu parsen.)

#tf.data.Dataset →  TFRecord 
def _serialize_example(feature1, feature2):
    feature = {
        'feature1': tf.train.Feature(float_list=tf.train.FloatList(value=[feature1])),
        'feature2': tf.train.Feature(int64_list=tf.train.Int64List(value=[feature2])),
        # ggf. weitere Features
    }
    example_proto = tf.train.Example(features=tf.train.Features(feature=feature))
    return example_proto.SerializeToString()

# Beispiel-Daten
feature1_list = [1.0, 2.0, 3.0]
feature2_list = [10, 20, 30]

with tf.io.TFRecordWriter('output.tfrecord') as writer:
    for f1, f2 in zip(feature1_list, feature2_list):
        example = _serialize_example(f1, f2)
        writer.write(example)


#TFRecord → tf.data.Dataset
# Pfad zur TFRecord-Datei
tfrecord_file = 'pfad/zur/datei.tfrecord'

# Funktion zum Parsen der einzelnen Beispiele
def _parse_function(example_proto):
    feature_description = {
        'feature1': tf.io.FixedLenFeature([], tf.float32),
        'feature2': tf.io.FixedLenFeature([], tf.int64),
        # weitere Features hier
    }
    return tf.io.parse_single_example(example_proto, feature_description)

# TFRecord-Datei in Dataset laden
dataset = tf.data.TFRecordDataset(tfrecord_file)
dataset = dataset.map(_parse_function)
Nach oben scrollen