2017-10-12 11 views
3

私はテンソルフローdataset APIを使用しています。私のコードを単純なケースでテストします。以下は、私が使用した簡単なコードを示しています。問題は、データセットのサイズが小さい場合、データセットAPIから返されるサイズが一貫していないように見えることです。私はそれに対処する適切な方法があると確信しています。しかし、私はそのページとチュートリアルのすべての機能を読んでも、それを見つけることはできませんでした。テンソルフローのデータセットAPIの返されるサイズは一定ではありません

import numpy as np 
import tensorflow as tf 

data_source = tf.zeros([24, 200, 64, 64, 1]) #[number_of_video, steps, pixel_w, pixel_h, channel] 
dataset = tf.contrib.data.Dataset.from_tensor_slices(data_source) 
dataset = dataset.shuffle(buffer_size=100) 
dataset = dataset.batch(16) 
dataset = dataset.repeat() 

iterator = tf.contrib.data.Iterator.from_structure(dataset.output_types, dataset.output_shapes) 
next_element = iterator.get_next() 
training_init_op = iterator.make_initializer(dataset) 

with tf.Session() as sess: 
    sess.run(training_init_op) 
    next_elem = next_element.eval() 
    print(np.shape(next_elem)) 
    next_elem = next_element.eval() 
    print(np.shape(next_elem)) 
    next_elem = next_element.eval() 
    print(np.shape(next_elem)) 
    next_elem = next_element.eval() 
    print(np.shape(next_elem)) 
    next_elem = next_element.eval() 
    print(np.shape(next_elem)) 
    next_elem = next_element.eval() 
    print(np.shape(next_elem)) 
    next_elem = next_element.eval() 
    print(np.shape(next_elem)) 

データセットはグレースケールのビデオです。ビデオのシーケンスは全部で24あり、ステップサイズはすべて200です。フレームサイズは64 x 64とシングルチャンネルです。私は、元のデータサイズが小さいので、それは推測ビデオの戻りサイズが16または8のいずれかである

16としてバッチサイズを設定し、100とバッファサイズが、コードの結果は、

(16, 200, 64, 64, 1) 
(8, 200, 64, 64, 1) 
(16, 200, 64, 64, 1) 
(8, 200, 64, 64, 1) 
(16, 200, 64, 64, 1) 
(8, 200, 64, 64, 1) 
(16, 200, 64, 64, 1) 
図24に示すように、データの終わりに達すると、APIは残っているものだけを返します。

しかし、わかりません。また、バッファサイズを100に設定しました。つまり、バッファに事前に小さなデータセットを埋め込む必要があります。そのバッファから、APIはバッチサイズが16のnext_elementを選択する必要があります。

私はテンソルフローでキュータイプのAPIを使用していましたが、この問題はありませんでした。とにかく元のデータのサイズがどのようなものであっても、イテレータがデータセットの最後に到達する瞬間があります。このAPIを使用している人がこの問題をどのように解決するのだろうか。

答えて

2

batch()repeat()を呼び出すようにしてください:

data_source = tf.zeros([24, 200, 64, 64, 1]) #[number_of_video, steps, pixel_w, pixel_h, channel] 
dataset = tf.contrib.data.Dataset.from_tensor_slices(data_source) 
dataset = dataset.shuffle(buffer_size=100) 
dataset = dataset.repeat() 
dataset = dataset.batch(16) 

結果私が手:

(16, 200, 64, 64, 1) 
(16, 200, 64, 64, 1) 
(16, 200, 64, 64, 1) 
(16, 200, 64, 64, 1) 
(16, 200, 64, 64, 1) 
(16, 200, 64, 64, 1) 
(16, 200, 64, 64, 1) 
関連する問題