Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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中读取整个CSV文件作为一个培训示例?_Python_Csv_Tensorflow_Reader - Fatal编程技术网

Python 如何在tensorflow中读取整个CSV文件作为一个培训示例?

Python 如何在tensorflow中读取整个CSV文件作为一个培训示例?,python,csv,tensorflow,reader,Python,Csv,Tensorflow,Reader,我的数据集由数百个.csv文件组成,其中列数固定,行数可变。问题是-如何将其读入tensorflow filename_queue = tf.train.string_input_producer(['file1.csv','file2.csv']) features_reader = tf.WholeFileReader() filename, value = features_reader.read(filename_queue) 现在,如果有某种方法将值解码为其中的实际数字,那就太好了。

我的数据集由数百个.csv文件组成,其中列数固定,行数可变。问题是-如何将其读入tensorflow

filename_queue = tf.train.string_input_producer(['file1.csv','file2.csv'])
features_reader = tf.WholeFileReader()
filename, value = features_reader.read(filename_queue)

现在,如果有某种方法将值解码为其中的实际数字,那就太好了。有没有办法做到这一点,或者我应该使用不同的读取器来代替?

因此,事实上,我用不同的读取器解决了这个问题,通过创建tf.records-tensorflow二进制文件,我认为在这种情况下,这通常是一种方法

虽然处理tf.records的官方文档并不令人满意,但这里有一个很好的解释:

首先需要读取文件并将其转换为二进制格式。在我的例子中,我只是将文件读取到一个numpy数组

file = your_custom_reader(csv_file)
file = file.tobytes()
现在,在我的例子中,列的数量是恒定的,但行的数量在数据集中是可变的。这可能很棘手-当您在中读取二进制文件时,它们是没有预定义形状的张量(在notes中的示例中,形状存储在二进制文件中,但这仍然意味着您需要在会话中对其求值,这对构建模型没有用)。因此,在这一步中,将张量填充到最大值是很有用的

file = your_custom_reader(csv_file)
file = pad_to_max_size(file)
file = file.tobytes()
向tf.record写入数据很容易。假设每个文件都有一个标签y:

writer = tf.python_io.TFRecordWriter(file_name)
example = tf.train.Example(features=tf.train.Features(feature={
    'features': tf.train.Feature(bytes_list=tf.train.BytesList(value=[file])),
    'y'       : tf.train.Feature(bytes_list=tf.train.BytesList(value=[y.tobytes()]))
    }))
writer.write(example.SerializeToString())
writer.close()
现在,二进制文件可以按如下方式加载

tfrecord_file_queue = tf.train.string_input_producer([file_name, file_name_2,...,file_name_N], name='queue')
reader = tf.TFRecordReader()
_, tfrecord_serialized = reader.read(tfrecord_file_queue)
tfrecord_features = tf.parse_single_example(tfrecord_serialized,
                    features={
                        'features': tf.FixedLenFeature([],tf.string),
                        'y'       : tf.FixedLenFeature([],tf.string)                                                   
                                },  name='tf_features')
正如我所说,对于代码的其余部分,知道张量的形状很重要。我的是形状1和形状2

features = tf.decode_raw(tfrecord_features['features'],tf.float32)
features = tf.reshape(audio_features, (SHAPE_1,SHAPE_2))
features.set_shape((SHAPE_1,SHAPE_2))
y = tf.decode_raw(tfrecord_features['y'],tf.float32)
上面我喜欢的斯坦福大学的演讲幻灯片中提供了将代码放入函数的更有组织的示例。我非常推荐这些幻灯片,特别是因为它们提供了更多关于缺少这个答案的解释。尽管如此,我还是希望它能有所帮助

你看了吗:是的,但它一次读取一行(一行.csv文件),我的单个输入应该是整个文件的内容