Tensorflow создает файл tfrecords из csv

Я пытаюсь написать файл csv (все столбцы - float) в файл tfrecords, а затем читать их обратно. Все примеры, которые я видел, упаковывают столбцы csv, а затем напрямую передают его в sess.run(), но я не могу понять, как вместо столбцов функций и столбца ярлыков вместо tfrecord. Как я могу это сделать?

Ответ 1

Вам понадобится отдельный script, чтобы преобразовать ваш файл csv в TFRecords.

Представьте, что у вас есть CSV со следующим заголовком:

feature_1, feature_2, ..., feature_n, label

Вам нужно прочитать свой CSV с чем-то вроде pandas, построить tf.train.Example вручную, а затем записать его в файл с помощью TFRecordWriter

csv = pandas.read_csv("your.csv").values
with tf.python_io.TFRecordWriter("csv.tfrecords") as writer:
    for row in csv:
        features, label = row[:-1], row[-1]
        example = tf.train.Example()
        example.features.feature["features"].float_list.value.extend(features)
        example.features.feature["label"].int64_list.value.append(label)
        writer.write(example.SerializeToString())

Ответ 2

def convert_to():
filename = os.path.join(wdir, 'ml-100k' + '.tfrecords')
print('Writing', filename)
with tf.python_io.TFRecordWriter(filename) as writer:
    with open("/Users/shishir/Documents/botconnect_Playground/tfRecords/ml-100k.train.rating", "r") as f:
        line = f.readline()
        while line != None and line != "":
            arr = line.split("\t")
            u, i, l  = int(arr[0]), int(arr[1]), int(arr[2])
            u_arr = np.reshape(u,[1]).astype('int64')
            i_arr = np.reshape(i,[1]).astype('int64')
            l_arr = np.reshape(l,[1]).astype('int64')
            example = tf.train.Example()
            example.features.feature["user"].int64_list.value.extend(u_arr)
            example.features.feature["item"].int64_list.value.extend(i_arr)
            example.features.feature["label"].int64_list.value.append(int(l_arr))
            writer.write(example.SerializeToString())
            line = f.readline()

Итак, это мое решение, и оно работает! Надеюсь, что это поможет

Приветствия.

Ответ 3

Вышеупомянутое решение не сработало в моем случае. Другой способ прочитать файл csv и создать tfRecord показан ниже:

Имена столбцов набора функций: Sl.No:, время, высота, ширина, среднее значение, стандартное отклонение, дисперсия, неоднородность, PixelCount, contourCount, Class.

Пример функций, которые мы получаем из dataset.csv:

Особенности = [5, 'D', 268, 497, 13,706, 863,4939, 29,385, 0,0427, 39675, 10]

ярлык: средний

def create_tf_example(features, label):

    tf_example = tf.train.Example(features=tf.train.Features(feature={
        'Time': tf.train.Feature(bytes_list=tf.train.BytesList(value=[features[1].encode('utf-8')])),
        'Height':tf.train.Feature(int64_list=tf.train.Int64List(value=[features[2]])),
        'Width':tf.train.Feature(int64_list=tf.train.Int64List(value=[features[3]])),
        'Mean':tf.train.Feature(float_list=tf.train.FloatList(value=[features[4]])),
        'Std':tf.train.Feature(float_list=tf.train.FloatList(value=[features[5]])),
        'Variance':tf.train.Feature(float_list=tf.train.FloatList(value=[features[6]])),
        'Non-homogeneity':tf.train.Feature(float_list=tf.train.FloatList(value=[features[7]])),
        'PixelCount':tf.train.Feature(int64_list=tf.train.Int64List(value=[features[8]])),
        'contourCount':tf.train.Feature(int64_list=tf.train.Int64List(value=[features[9]])),
        'Class':tf.train.Feature(bytes_list=tf.train.BytesList(value=[label.encode('utf-8')])),
    }))
    return tf_example

csv = pd.read_csv("dataset.csv").values
with tf.python_io.TFRecordWriter("dataset.tfrecords") as writer:
  for row in csv:
     features, label = row[:-1], row[-1]
     print features, label
     example = create_tf_example(features, label)
     writer.write(example.SerializeToString())
writer.close()

Для получения более подробной информации нажмите здесь. Это работает для меня, надеюсь, это работает.