【问题标题】:Tensorflow create a tfrecords file from csvTensorflow 从 csv 创建一个 tfrecords 文件
【发布时间】:2016-12-30 20:30:56
【问题描述】:

我正在尝试将 csv 文件(所有列都是浮点数)写入 tfrecords 文件,然后将它们读回。我见过的所有示例都将 csv 列打包,然后直接将其提供给 sess.run() 但我不知道如何将特征列和标签列写入 tfrecord。我怎么能这样做?

【问题讨论】:

  • 我的帖子能回答你的问题吗?
  • 是的,抱歉花了这么长时间我最近很忙。感谢您的帮助!

标签: python tensorflow


【解决方案1】:

您需要一个单独的脚本来将您的 csv 文件转换为 TFRecords。

假设您有一个带有以下标题的 CSV:

feature_1, feature_2, ..., feature_n, label

您需要使用pandas 之类的内容读取您的CSV,手动构造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())

【讨论】:

  • 似乎此代码仅允许您添加浮动功能。您需要一种方法来调整 Int64 功能的代码,尤其是分类 ByteList 功能。
  • 为什么在标签只有单个值而不是列表时使用 int64_list
  • 对于 TF 2.0 使用 tf.io.TFRecordWriter() 代替
【解决方案2】:

上述解决方案在我的情况下不起作用。另一种读取 csv 文件并创建 tfRecord 的方法如下所示:

特征集列名有:Sl.No:,Time,Height, Width,Mean,Std, Variance, Non-homogeneity, PixelCount, contourCount, Class。

我们从 dataset.csv 获得的示例特征:

特征= [5, 'D', 268, 497, 13.706, 863.4939, 29.385, 0.0427, 39675, 10]

标签:中等

import pandas as pd
import tensorflow as tf

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()

更多详情click here。这对我有用,希望它有用。

【讨论】:

  • 感谢您的示例。在 TF 2.x 中,TFRecordWriter 已移至 tf.io.TFRecordWriter
【解决方案3】:
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()

这就是我的解决方案,它有效!希望这会有所帮助

干杯。

【讨论】:

  • 感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 它的长期价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
猜你喜欢
  • 1970-01-01
  • 2017-01-20
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 2020-06-18
  • 2017-05-01
  • 1970-01-01
相关资源
最近更新 更多