使用TensorFlow Dataset API和Pandas输入管道?

时间:2018-03-03 19:41:35

标签: pandas tensorflow tensorflow-datasets

我正在尝试创建一个TensorFlow数据集,该数据集接收CSV文件的路径名列表并创建批量的训练数据。首先,我创建一个解析函数,它使用Pandas来读取前n行。我将此函数作为' map'的参数。数据集中的方法

def _get_data_for_dataset(file_name,rows=100):
  print(file_name.decode())

  df_input=pd.read_csv(os.path.join(folder_name, file_name.decode()),
                     usecols =['Wind_MWh','Actual_Load_MWh'],nrows = rows)

  X_data = df_input.as_matrix()
  X_data.astype('float32', copy=False)

  return X_data

 dataset = tf.data.Dataset.from_tensor_slices(file_names)
 dataset = dataset2.map(lambda file_name: tf.py_func(_get_data_for_dataset,[file_name,100], tf.float64))
 dataset= dataset.batch(2) #Create batches
 iter = dataset.make_one_shot_iterator()
 get_batch = iter.get_next()

with tf.Session() as sess:
  print(sess.run(get_batch).shape)

上面的代码可以工作,但不是生成一个形状为(200,2)的数据集,而是生成一个形状为(2,100,2)的数据集。请帮忙。

1 个答案:

答案 0 :(得分:1)

我终于从Dataset API 'flat_map' method producing error for same code which works with 'map' method得到了答案 我发布完整的代码,以防它可能帮助其他想要同时使用Pandas和Dataset API的人。

folder_name = './data/power_data/'
file_names = os.listdir(folder_name)

def _get_data_for_dataset(file_name):
    df_input=pd.read_csv(os.path.join(folder_name, file_name.decode()),
                         usecols=['Wind_MWh', 'Actual_Load_MWh'])
    X_data = df_input.as_matrix()
    return X_data.astype('float32', copy=False)

dataset = tf.data.Dataset.from_tensor_slices(file_names)

# Use `Dataset.from_tensor_slices()` to make a `Dataset` from the output of 
# the `tf.py_func()` op.
dataset = dataset.flat_map(lambda file_name: tf.data.Dataset.from_tensor_slices(
    tf.py_func(_get_data_for_dataset, [file_name], tf.float32)))

dataset = dataset.batch(100)

iter = dataset.make_one_shot_iterator()
get_batch = iter.get_next()

  with tf.Session() as sess:
    print(sess.run(get_batch))