我對tensorflow很陌生,我試圖用批處理從我的csv文件中進行訓練。Tensorflow - 批處理問題
這是我讀的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.所以我想要的是:在每一個「時代」開始'第一條記錄',共培訓21批次,共100條記錄,最後1批93條記錄。所以共有22批次。
但是,我發現每批有100個尺寸 - 即使是最後一個。而且,它不是從第二個「時代」開始的「第一條記錄」。
2.
如何獲取記錄大小(本例中爲2193)?我應該硬編碼嗎?還是有其他聰明的方式來做到這一點?我使用了tendor.get_shape()。as_list(),但它不適用於batch_xs。它只是返回給我空的形狀[]。
所以仍然沒有辦法獲得'記錄數(2193)'? – BlakStar
''total_batch'變量將在'while'循環結束時包含2193(或者記錄的實際數量)。 – mrry
我今天運行它......並且它犯了錯誤。這是因爲batch_xs的形狀[7,100],所以它不能被饋送到形狀爲[?,7]的X.我閱讀了你鏈接的指南,並發現它有意成型[7,100]。但我不明白爲什麼batch_xs已經塑造[7,100]而不是[100,7] ...所以我應該改變我的訓練模型?還是有另一種方式? – BlakStar