Как преобразовать файл csv в формат TFRecord TensorFlow?

#python #tensorflow

#python #tensorflow

Вопрос:

Всем привет, мне нужно преобразовать файл csv в TFRecord для TensorFlow. Я действительно ценю вашу помощь. Пример файла csv, который мне нужно преобразовать,:

Col1 Col2 Col3 Col4 Target

2.56 0.98 0.45 7.8 0.189

3.10 5.78 4.78 9.0 0.78

….

Большое вам спасибо!!!

Комментарии:

1. Я считаю, что «импорт csv» и TFRecordWriter были бы удобны для реализации нужной вам функциональности. Вот пример: github.com/tensorflow/tensorflow/blob/r0.11/tensorflow/examples /…

2. Большое вам спасибо!!! @YaoZhang

Ответ №1:

Приведенный ниже код создаст файл TFRecords из нескольких файлов CSV… просто пока не удалось прочитать данные обратно.

 import pandas as pd
import numpy as np
import os
import tensorflow as tf
from tqdm import tqdm


def _int64_feature(value):
    return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))


def _float_feature(value):
    return tf.train.Feature(float_list=tf.train.FloatList(value=value))


def _bytes_feature(value):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))


def make_q_list(filepathlist, filetype):
    filepathlist = filepathlist
    filepaths = []
    labels = []
    for path in filepathlist:
        data_files = os.listdir(path)
        for data in data_files:
            if data.endswith(filetype):
                data_file = os.path.join(path, data)
                data_label = os.path.basename(os.path.normpath(path))
                filepaths.append(data_file)
                labels.append(data_label)

    return filepaths, labels 

def tables_to_TF(queue_list, tf_filename, file_type='csv'):
    # Target variable needs to be the last column of data
    filepath = os.path.join(tf_filename)
    print('Writing', filepath)
    writer = tf.python_io.TFRecordWriter(tf_filename)
    for file in tqdm(queue_list):
        if file_type == 'csv':
            data = pd.read_csv(file).values
        elif file_type == 'hdf':
            data = pd.read_hdf(file).values
        else:
            print(file_type, 'is not supported at this time...')
            break
        for row in data:
            # file formate : feature 1…..feature n, label
            features, label = row[:-1], row[-1]
            example = tf.train.Example()
            example.features.feature["features"].float_list.value.extend(features)
            example.features.feature["label"].float_list.value.append(label)
            writer.write(example.SerializeToString()

#Generate data
for i in range(10):
    filename = './Data/random_csv'   str(i)   '.csv'
    pd.DataFrame(np.random.uniform(0,100,size=(100, 50))).to_csv(filename)

filepathlist = ['./Data']
q, _ = make_q_list(filepathlist, '.csv')
tffilename = 'Demo_TFR.tfrecords'
tables_to_TF(q, tffilename, file_type='csv')
  

18.03.2018 РЕДАКТИРОВАТЬ: удалена избыточная строка кода data_file = data_file

Комментарии:

1. data_file = data_file, не имеет особого смысла, верно?