Как преобразовать данные CSV в файлы TFRecord - PullRequest
0 голосов
/ 27 сентября 2019

В настоящее время я работаю над системой, которая может взять данные из файла CSV и импортировать их в файл TFRecord, однако у меня есть несколько вопросов.

Для начала мне нужно знать, какой тип TFRecordфайл может взять, когда используются типы CSV удалены.

Во-вторых, Как я могу преобразовать тип данных: объект в тип, который может принимать TFRecord?

У меня есть два столбца (опубликую примерниже) из двух типов объектов, которые являются строками. Как я могу преобразовать эти данные в правильный тип для TFRecords?

При импорте Im, чтобы добавить данные из каждой строки за раз в файл TFRecord, любой совет илидокументация была бы отличной, я некоторое время искал эту проблему, и кажется, что в TFRecord могут быть только целые числа, числа с плавающей запятой, но как насчет списка / массива целых чисел?

Спасибо за чтение!

Краткое примечание. Я использую PANDAS для создания кадра данных файла CSV

Некоторые примеры кода Im, использующие

import pandas as pd
from ast import literal_eval
import numpy as np
import tensorflow as tf


tf.compat.v1.enable_eager_execution()


def Start():
    db = pd.read_csv("I:\Github\ClubKeno\Keno Project\Database\..\LotteryDatabase.csv")

    pd.DataFrame = db
    print(db['Winning_Numbers'])
    print(db.dtypes)

    training_dataset = (
        tf.data.Dataset.from_tensor_slices(
            (
                tf.cast(db['Draw_Number'].values, tf.int64),
                tf.cast(db['Winning_Numbers'].values, tf.int64),
                tf.cast(db['Extra_Numbers'].values, tf.int64),
                tf.cast(db['Kicker'].values, tf.int64)
            )
        )
    )

    for features_tensor, target_tensor in training_dataset:
        print(f'features:{features_tensor} target:{target_tensor}')

Сообщение об ошибке:

Error Message

Данные CSV

Обновление: получено два столбца дат, работающих с использованием следующей функции ...

dataset = tf.data.experimental.make_csv_dataset(
        file_pattern=databasefile,
        column_names=['Draw_Number', 'Kicker'],
        column_defaults=[tf.int64, tf.int64],
    )

Однако, когда я пытаюсь включить мои два других типа объектов столбца (Как выглядят данные в обоих этих столбцах) "3,9,11,16,25,26,28,29,36,40,41,46,63,66,67,69,72,73,78,80"

Я получаю сообщение об ошибке, вот функция, которую я попытался для этого

    dataset = tf.data.experimental.make_csv_dataset(
        file_pattern=databasefile,
        column_names=['Draw_Number', 'Winning_Numbers', 'Extra_Numbers', 'Kicker'],
        column_defaults=[tf.int64, tf.compat.as_bytes, tf.compat.as_bytes, tf.int64],
        header=True,
        batch_size=100,
        field_delim=',',
        na_value='NA'
    )

Появляется эта ошибка:

TypeError: Failed to convert object of type <class 'function'> to Tensor. Contents: <function as_bytes at 0x000000EA530908C8>. Consider casting elements to a supported type.

Должен ли я попытаться привести эти два типа вне функции и попытаться объединить их позже в файл TFRecord вместе с tf.data из функции make_csv_dataset?

1 Ответ

1 голос
/ 27 сентября 2019

Для начала мне нужно знать, какой тип файла TFRecord может принимать, когда используются типы CSV.

TFRecord принимает следующие типы данных: string, byte, float32, float 64, bool, enum, int32, int64, uint32, uint64 Обсуждается здесь .

Во-вторых, как я могу преобразовать тип данных: объект в тип, который может принимать TFRecord?

Здесь - пример из TF, его сложно сразу переварить, но если внимательно его прочитать, это легко.

иметь два столбца (опубликуем пример ниже) двух типов объектов, которые являются строками. Как я могу преобразовать эти данные в правильный тип для TFRecords?

Для данных строкового типа вам требуется tf.train.BytesList, которыйвозвращает bytes_list из строки.

При импорте я надеюсь добавить данные из каждой строки за раз в файл TFRecord, любой совет или документация будут хороши, я искал некоторое время вэта проблема и кажется таммогут быть только целые числа, числа с плавающей точкой, введенные в TFRecord, но как насчет списка / массива целых чисел?

Краткое примечание. Я использую PANDAS для создания кадра данных из файла CSV

Вместо того, чтобы читать CSV-файл с помощью Pandas, я бы рекомендовал вам использовать tf.data.experimental.make_csv_dataset определено здесь .Это сделает этот процесс преобразования намного быстрее, чем Pandas, и даст вам меньше проблем с совместимостью для работы с классами TF.Если вы используете эту функцию, вам не нужно будет читать файл csv строка за строкой, но все сразу, используя map(), который использует eager execution. Этот хороший учебник для начала.

Случайно отредактированный неправильный раздел поста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...