2016-12-30 85 views
5

我想写一个csv文件(所有列都是浮动)到tfrecords文件,然后再读出它们。我看到的所有示例都包装了csv列,然后直接将其提供给sess.run(),但我无法弄清楚如何将特征列和标签列写入tfrecord。我怎么能这样做?Tensorflow从csv创建一个tfrecords文件

+1

我的文章是否回答你的问题? – standy

+0

是的,抱歉花了这么长时间我最近很忙。谢谢您的帮助! – Nitro

回答

13

您将需要一个单独的脚本来将您的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()) 
-1
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() 
到文件

这就是我的解决方案,它的工作原理!希望这可以帮助

干杯。

+0

感谢您使用此代码段,这可能会提供一些有限的短期帮助。通过展示*为什么*这是一个很好的解决方案,并且使它对未来的读者更有用,一个正确的解释[将大大提高](// meta.stackexchange.com/q/114762)其长期价值其他类似的问题。请[编辑]你的答案以添加一些解释,包括你所做的假设。 –