在Tensorflow的同一行中读取具有功能和标签的CSV文件

时间:2018-06-28 18:48:51

标签: python python-3.x pandas tensorflow

我有一个约有5000行和3757列的.csv文件。每行的前3751列是要素,后6列是标签。每行是一组功能标签对。

我想知道我是否可以使用内置函数或任何快速方法:

  1. 将前3751列解析为要素(这些列没有标题)
  2. 将最后6列中的任何一列解析为标签,这意味着我想将最后6列中的任何列都作为标签进行培训。

基本上,我想训练一个具有3751个特征和1个标签的DNN模型,我希望将解析函数的输出馈送到以下函数中进行训练:

train_input_fn = tf.estimator.inputs.numpy_input_fn(
      x={"x": np.array(training_set.data)},
      y=np.array(training_set.target),
      num_epochs=None,
      shuffle=True) 

我知道某些功能,例如“ tf.contrib.learn.datasets.base.load_csv_without_header”可以做类似的事情,但已被弃用。

2 个答案:

答案 0 :(得分:2)

您可以查看tf.data.Dataset的输入管道(LINK)。基本上,您可以读取一个csv文件,可能以某种方式批处理/随机播放/映射它,并在数据集上创建一个迭代器。每当您评估iterator.get_next()时,您的csv中就会得到许多行,这些行等于批处理大小。关于功能和标签的分离,您可以简单地使用标准python语法访问批处理中的单个元素,例如features = batch[:-6]label = batch[-1]并将它们提供给您喜欢的任何功能。

在tensorflow网站上,有一个有关如何使用这些输入管道(LINK)的深入教程。

答案 1 :(得分:0)

train_features_interim = []
  train_labels_interim = []
  with open(train_file) as f:
      csvreader = csv.reader(f)
      for row in csvreader:
          train_features_interim.append(row)  

  train_features_interim = pd.DataFrame(train_features_interim)      
  a = len(train_features_interim.columns)-6
  train_labels_interim = train_features_interim.iloc[:, a:a+1]   #train one label first
  train_features_interim = train_features_interim.iloc[:, :a]
  train_features_numpy = np.asarray(train_features_interim, dtype=np.float32)
  train_labels_numpy = np.asarray(train_labels_interim, dtype=np.float32)

我现在正在工作。虽然不是很干净,但是可以用。我可以调整“ a:a + 1”部分,以确定我要在inot train_labels_interim中放入多少(或哪一)列。