Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于酸洗熊猫数据输入的tensorflow管道_Python_Pandas_Tensorflow_Tensorflow Datasets_Tensorflow Estimator - Fatal编程技术网

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的管道。我想使用高级API
tf.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_])