我对 tensorflow 很陌生,我正在尝试使用批处理从我的 csv 文件中进行训练。
这是我用于读取 csv 文件并进行批处理的代码
filename_queue = tf.train.string_input_producer(
['BCHARTS-BITSTAMPUSD.csv'], shuffle=False, name='filename_queue')
reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
# Default values, in case of empty columns. Also specifies the type of the
# decoded result.
record_defaults = [[0.], [0.], [0.], [0.], [0.],[0.],[0.],[0.]]
xy = tf.decode_csv(value, record_defaults=record_defaults)
# collect batches of csv in
train_x_batch, train_y_batch = \
tf.train.batch([xy[0:-1], xy[-1:]], batch_size=100)
这是培训:
# initialize
sess = tf.Session()
sess.run(tf.global_variables_initializer())
# Start populating the filename queue.
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
# train my model
for epoch in range(training_epochs):
avg_cost = 0
total_batch = int(2193 / batch_size)
for i in range(total_batch):
batch_xs, batch_ys = sess.run([train_x_batch, train_y_batch])
feed_dict = {X: batch_xs, Y: batch_ys}
c, _ = sess.run([cost, optimizer], feed_dict=feed_dict)
avg_cost += c / total_batch
print('Epoch:', '%04d' % (epoch + 1), 'cost =', '{:.9f}'.format(avg_cost))
coord.request_stop()
coord.join(threads)
这是我的问题:
1.
我的 csv 文件有 2193 条记录,我的批处理大小是 100。所以我想要的是:在每个 'epoch' 中,从 'first record' 开始,训练 21 批 100 条记录,最后 1 批 93 条记录。所以总共22批。
但是,我发现每批都有 100 个大小 - 即使是最后一个。此外,它不是从第二个“纪元”开始的“第一条记录”。
2.
如何获取记录大小(在本例中为 2193)?我应该硬编码吗?或者还有其他聪明的方法吗?我使用了tendor.get_shape().as_list() 但它不适用于batch_xs。它只是返回我空的形状 []。