Tensorflow csv数据集的使用

我有一个csv文件,格式和数据如下:

ID  nr1 nr2 nr3 nr4 nr5 next_nr1   1   2   3   4   5   62   2   3   4   5   6   73   3   4   5   6   7   84   4   5   6   7   8   95   5   6   7   8   9   106   6   7   8   9   10  117   7   8   9   10  11  128   8   9   10  11  12  139   9   10  11  12  13  1410  10  11  12  13  14  15

因此,我的训练数据包含10行。我想使用tf.contrib.data.CsvDataset来读取这些数据。以下是读取数据的示例代码:

import tensorflow as tfimport numpy as npITERATOR_BATCH_SIZE = 2NR_EPOCHS = 3train1_path = 'train1_short.csv'dataset = tf.contrib.data.CsvDataset(train1_path,                                     [tf.float32, tf.float32, tf.float32, tf.float32, tf.float32, tf.float32, tf.float32],                                     header=True)dataset = dataset.batch(ITERATOR_BATCH_SIZE)with tf.Session() as sess:    for i in range (NR_EPOCHS):        print('\nepoch: ', i)        iterator = dataset.make_one_shot_iterator()        next_element = iterator.get_next()        while True:                        try:              data_and_target = sess.run([next_element])            except tf.errors.OutOfRangeError:              break            print("\n\n", data_and_target)

当我运行这段代码时,我希望每个批次包含两行数据。但我得到的数据看起来很奇怪。这是第一个epoch的输出:

epoch:  0 [(array([1., 2.], dtype=float32), array([1., 2.], dtype=float32), array([2., 3.], dtype=float32), array([3., 4.], dtype=float32), array([4., 5.], dtype=float32), array([5., 6.], dtype=float32), array([6., 7.], dtype=float32))] [(array([3., 4.], dtype=float32), array([3., 4.], dtype=float32), array([4., 5.], dtype=float32), array([5., 6.], dtype=float32), array([6., 7.], dtype=float32), array([7., 8.], dtype=float32), array([8., 9.], dtype=float32))] [(array([5., 6.], dtype=float32), array([5., 6.], dtype=float32), array([6., 7.], dtype=float32), array([7., 8.], dtype=float32), array([8., 9.], dtype=float32), array([ 9., 10.], dtype=float32), array([10., 11.], dtype=float32))] [(array([7., 8.], dtype=float32), array([7., 8.], dtype=float32), array([8., 9.], dtype=float32), array([ 9., 10.], dtype=float32), array([10., 11.], dtype=float32), array([11., 12.], dtype=float32), array([12., 13.], dtype=float32))] [(array([ 9., 10.], dtype=float32), array([ 9., 10.], dtype=float32), array([10., 11.], dtype=float32), array([11., 12.], dtype=float32), array([12., 13.], dtype=float32), array([13., 14.], dtype=float32), array([14., 15.], dtype=float32))]

相反,我期望第一个批次看起来像这样:

[(array([1., 1., 2., 3., 4., 5., 6], dtype=float32), array([2., 2., 3., 4., 5., 6., 7.], dtype=float32)]

这个问题可能非常简单,但我就是看不出为什么会这样。或许在这个领域更有经验的人能立刻看出问题所在。


回答:

CsvDatset的每条记录必须转换为张量。请尝试以下代码,看是否能解决你的问题:

dataset = tf.contrib.data.CsvDataset(train1_path,                                     [tf.float32, tf.float32, tf.float32, tf.float32, tf.float32, tf.float32, tf.float32],                                     header=True, field_delim=' ')dataset = dataset.map(lambda *x: tf.convert_to_tensor(x))dataset = dataset.batch(ITERATOR_BATCH_SIZE)with tf.Session() as sess:    for i in range (NR_EPOCHS):        print('\nepoch: ', i)        iterator = dataset.make_one_shot_iterator()        next_element = iterator.get_next()        while True:                        try:              data_and_target = sess.run(next_element)            except tf.errors.OutOfRangeError:              break            print("\n\n", data_and_target)

在我的测试中,我必须设置field_delim参数才能使其正常工作。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注