私はテンソルフローが新しく、バッチを使用して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)
とは、訓練のためのmake:
# 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です。だから私はこれを望んでいます。あらゆるエポックで'最初のレコード'、100レコードの21バッチ、93レコードの最後の1バッチを列車に送ります。合計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が[100,7]の代わりに[7,100]という形をしている理由を理解していません。または別の方法がありますか? – BlakStar