Conversión de tipo de conjunto de datos: archivo TFRecords

TFRecord es el formato de almacenamiento de conjuntos de datos en TensorFlow. Cuando organizamos los conjuntos de datos en formato TFRecord, TensorFlow puede leer y procesar estos conjuntos de datos de manera eficiente, lo que nos ayuda a realizar entrenamientos de modelos a gran escala de manera más eficiente.

Formato: TFRecord se puede entender como un archivo de lista compuesto por una serie de elementos tf.train.Example serializados, y cada tf.train.Example se compone de varios diccionarios tf.train.Feature. El formulario es el siguiente:

[
    {
    
       # example 1 (tf.train.Example)
        'feature_1': tf.train.Feature,
        ...
        'feature_k': tf.train.Feature
    },
    ...
    {
    
       # example N (tf.train.Example)
        'feature_1': tf.train.Feature,
        ...
        'feature_k': tf.train.Feature
    }
]
# 字典结构如
feature = {
    
    
                'image': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image])), 
                'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[label]))  
            }
  • Guardar TFRecord
    • Para organizar varios conjuntos de datos en formato TFRecord, debemos realizar los siguientes pasos para cada elemento del conjunto de datos:
      leer el elemento de datos en la memoria
    • Convierta este elemento en un objeto tf.train.Example (cada tf.train.Example consta de varios diccionarios tf.train.Feature, por lo que primero debe crear un diccionario de características);
    • Serialice el objeto tf.train.Example en una cadena y escríbalo en un archivo TFRecord a través de un tf.io.TFRecordWriter predefinido.
  • Leer datos TFRecord
    • Lea el archivo TFRecord original a través de tf.data.TFRecordDataset (en este momento, el objeto tf.train.Example en el archivo no se ha deserializado) y obtenga un objeto de conjunto de datos tf.data.Dataset;
    • A través del método Dataset.map, ejecute la función tf.io.parse_single_example para cada cadena tf.train.Example serializada en el objeto del conjunto de datos para lograr la deserialización.

código:

# -*- coding: utf-8 -*-
"""
@Time    : 2022-08-03 22:02
@Author  : peyzhang
@File    : tfRecode.py
@Software: PyCharm
"""

import tensorflow as tf
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"

train_cars_dir = 'F:/AI/data//train/car/'
train_human_dir = 'F:/AI/data//train/dog/'
tfrecord_file = 'F:/AI/data//train.tfrecords'


def main():

    train_car_filenames =  [train_cars_dir + filename for filename in os.listdir(train_cars_dir)]
    train_dog_filenames =  [train_human_dir + filename for filename in os.listdir(train_human_dir)]
    train_filename = train_car_filenames + train_dog_filenames
    train_labels = [0] * len(train_car_filenames) + [1] *len(train_dog_filenames)
    print(train_filename)
    print(train_labels)

    with tf.io.TFRecordWriter(tfrecord_file) as writer:
        for filename , label in zip(train_filename, train_labels):
            image = open(filename,"rb").read()
            feature = {
    
    
                "image": tf.train.Feature(bytes_list=tf.train.BytesList(value=[image])),
                "label": tf.train.Feature(int64_list=tf.train.Int64List(value=[label]))
            }

            example = tf.train.Example(features=tf.train.Features(feature=feature))
            writer.write(example.SerializeToString())
def readTFrecord():
    raw_dataset = tf.data.TFRecordDataset(tfrecord_file)
    feature_description = {
    
    
        'image': tf.io.FixedLenFeature([], tf.string),
        'label': tf.io.FixedLenFeature([], tf.int64),
    }

    def decoding(example_string):
        fdict = tf.io.parse_single_example(example_string, feature_description)
        fdict['image'] = tf.io.decode_jpeg(fdict['image'])
        return fdict['image'], fdict['label']

    dataseate = raw_dataset.map(decoding)
    for iamge , label in dataseate:
        print(iamge, label)

if __name__ == '__main__':
    # main()
    readTFrecord()



Supongo que te gusta

Origin blog.csdn.net/Peyzhang/article/details/126150626
Recomendado
Clasificación