Python 用于酸洗熊猫数据输入的tensorflow管道
我想输入压缩的Python 用于酸洗熊猫数据输入的tensorflow管道,python,pandas,tensorflow,tensorflow-datasets,tensorflow-estimator,Python,Pandas,Tensorflow,Tensorflow Datasets,Tensorflow Estimator,我想输入压缩的pd.read_pickle(filename,compression='xz')pandas数据帧作为到tensorflow的管道。我想使用高级APItf.estimator分类器,它需要一个输入函数。 我的数据文件是大型浮点数矩阵(1400X16),每个矩阵对应一个特定类型(标签)。每个类型(标签)都包含在不同的目录中,因此我从其目录中知道矩阵标签。在底层,我知道我可以使用feed\u dict={X:batch\u X:Y\u:batch\u Y}来填充数据,以提供数据管道,
pd.read_pickle(filename,compression='xz')
pandas数据帧作为到tensorflow的管道。我想使用高级APItf.estimator
分类器,它需要一个输入函数。
我的数据文件是大型浮点数矩阵(1400X16),每个矩阵对应一个特定类型(标签)。每个类型(标签)都包含在不同的目录中,因此我从其目录中知道矩阵标签。在底层,我知道我可以使用feed\u dict={X:batch\u X:Y\u:batch\u Y}
来填充数据,以提供数据管道,但是tf.estimator
需要一个输入函数。例如,假设我有两个标签,我的函数可能是这样的
def my_input_fn(directory,file_name):
data=pd.read_pickle(directory+file_name,compression='xz')
#sometimes I need to operate columns
data=data['col1']*data['col2']
if directory=='./dir1':
label=[1,0]
elif directory=='./dir2':
label=[0,1]
return data,label
但是我很难理解如何将输入映射到tensorflow图dict,以及
tf.estimator
如何接受我的函数返回。返回数据和标签的正确方法是什么,以便它们进入管道?为了防止其他人有类似问题,我将编写一个小版本的解决方案
我定义了一个名为“extract”的函数,并使用tf.py_func
将这个提取的numpy数组映射为一个数据集。然后从“标签”(一个热的numpy数组)启动另一个数据集,并根据提取的数据帧的文件名启动。提取的数据帧和一个热数组用tf.data.Dataset.zip
压缩到最终的数据集中。最后的数据集可以预取、迭代等
def extract(file_name):
df=pd.read_pickle(file_name,compression='xz')
df=df.astype(dtype=float)
... #extra manipulations
return df.values.astype('float32', copy=False)
dataset1 = tf.data.Dataset.list_files(file_names)
dataset1 = dataset1.map(lambda filename: tf.py_func(extract,filename],tf.float32),num_parallel_calls=10)
dataset2 = tf.data.Dataset.from_tensor_slices(labels)
dataset = tf.data.Dataset.zip((dataset1,dataset2))
iter = dataset.make_one_shot_iterator()
get_batch = iter.get_next()
X,Y_= get_batch
with tf.Session() as sess:
sess.run(init)
xx,yy=sess.run([X,Y_])