【问题标题】:How to get dataset into array如何将数据集放入数组
【发布时间】:2019-09-09 14:50:02
【问题描述】:

我已经学习了所有的教程并搜索了“加载 csv tensorflow”,但就是无法理解这一切的逻辑。我不是一个完全的初学者,但是我没有太多时间来完成这个,我突然被扔进了Tensorflow,这出乎意料的困难。

让我列出来:

非常简单的 CSV 文件,包含 184 列,都是浮点数。一行就是今天的价格,三个买入信号,以及前 180 天的价格

close = tf.placeholder(float, name='close')

signals = tf.placeholder(bool, shape=[3], name='signals')

previous = tf.placeholder(float, shape=[180], name = 'previous')

本文:https://www.tensorflow.org/guide/datasets 它涵盖了如何很好地加载。它甚至有一个关于更改为 numpy 数组的部分,这是我需要训练和测试 'net.然而,正如作者在通往该网页的文章中所说,它相当复杂。似乎一切都是为了进行数据操作,我们已经对数据进行了规范化(自 1983 年以来,人工智能在输入、输出和层方面并没有真正改变)。

这是一种加载它的方法,但不适用于 Numpy,也没有不操作数据的示例。

 with tf.Session as sess:

  sess.run( tf.global variables initializer())

  with open('/BTC1.csv') as csv_file:

    csv_reader = csv.reader(csv_file, delimiter =',')

    line_count = 0

    for row in csv_reader:

      ?????????

      line_count += 1

我需要知道如何将 csv 文件放入

close = tf.placeholder(float, name='close')

signals = tf.placeholder(bool, shape=[3], name='signals')

previous = tf.placeholder(float, shape=[180], name = 'previous')

这样我就可以按照教程来训练和测试网络。

【问题讨论】:

  • 在一个“紧张”的论坛中提出了一个有点幽默的问题。
  • this 有用吗?
  • 啊...我没有注意到他们使用了 CSV。我们这些老人... Sheesh =)

标签: csv numpy tensorflow artificial-intelligence


【解决方案1】:

你的问题对我来说不是很清楚。您可能会回答,如果我错了,请告诉我,如何在您的模型中输入数据?有几种方式可以做到这一点。

  1. 在会话期间使用带有feed_dict 的占位符。这是基本且更容易的一种,但经常受到训练性能问题的影响。进一步的解释,检查这个post。
  2. 使用队列。我不建议,因为它已被第三种方法取代,因此难以实施且记录不充分。
  3. tf.data API。

...

所以用第一种方法回答你的问题:

# get your array outside the session
with open('/BTC1.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter =',')
    dataset = np.asarray([data for data in csv_reader])
    close_col = dataset[:, 0]
    signal_cols = dataset[:, 1: 3]
    previous_cols = dataset[:, 3:]

# let's say you load 100 row each time for training
batch_size = 100

# define placeholders like you
...

with tf.Session() as sess:
    ...
    for i in range(number_iter):
        start = i * batch_size
        end = (i + 1) * batch_size
        sess.run(train_operation, feed_dict={close: close_col[start: end, ],
                                             signals: signal_col[start: end, ],
                                             previous: previous_col[start: end, ]
                                             }
                 )

第三种方法:

# retrieve your columns like before
...

# let's say you load 100 row each time for training
batch_size = 100

# construct your input pipeline
c_col, s_col, p_col = wrapper(filename)
batch = tf.data.Dataset.from_tensor_slices((close_col, signal_col, previous_col))
batch = batch.shuffle(c_col.shape[0]).batch(batch_size)  #mix data --> assemble batches --> prefetch to RAM and ready inject to model
iterator = batch.make_initializable_iterator()
iter_init_operation = iterator.initializer
c_it, s_it, p_it = iterator.get_next() #get next batch operation automatically called at each iteration within the session

# replace your close, signal, previous placeholder in your model by c_it, s_it, p_it when you define your model
...

with tf.Session() as sess:
    # you need to initialize the iterators
    sess.run([tf.global_variable_initializer, iter_init_operation])
    ...
    for i in range(number_iter):
        start = i * batch_size
        end = (i + 1) * batch_size
        sess.run(train_operation)

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2015-05-30
    • 2018-06-12
    相关资源
    最近更新 更多