2017-12-06 1 views
0

In TensorFlow, sagen wir haben Trainingsdaten xs in numpy NHCW-Format. Ich mag Chargen in Tensorflow von xs probieren, ich habeWarum fügt tf.train.batch eine zusätzliche Dimension zur Ausgabe in TensorFlow hinzu?

xs = np.reshape(range(32), [4,2,2,2])  
tensor_list = [tf.convert_to_tensors(x) for x in xs] 
#x_tensor = tf.convert_to_tensors(xs) # tried this version too 
x_batch = tf.train.shuffle_batch(tensor_list, batch_size=3, capacity=50, min_after_dequeue=10) 

Statt Probenahme aus tensor_list, gibt diesen Code eine Liste, deren Länge das gleiche der Anzahl der Datenpunkte (4 in diesem Fall), und jeder Listenelement ist ein Tensor, wobei die erste Dimension batch_size ist (in diesem Fall 3). Persönlich wäre das intuitive Ergebnis x_batch ist ein 4-dimensionaler Tensor und der Wert der ersten Dimension ist batch_size, und der Inhalt wird nach dem Zufallsprinzip abgetastet. Dann haben wir jedes Mal, wenn wir sess.run(x_batch) anrufen, eine andere Charge.

Bitte lassen Sie mich wissen, wo ich falsch gemacht habe.

Antwort

0

Haben Sie das nicht herausgefunden, aber eine andere Lösung gefunden als unten.

xs = np.reshape(range(32), [4,2,2,2])  
x_tensor = tf.convert_to_tensor(xs) 
dataset = tf.data.Dataset.from_tensor_slices(x_tensor) 
dataset = dataset.batch(2) 
dataset = dataset.shuffle(buffer_size=10000) 
iterator = dataset.make_initializable_iterator() 
sess.run(iterator.initializer) 

while True: 
    try: 
    next_element = iterator.get_next() 
    except tf.errors.OutOfRangeError: 
    print("End of dataset") # ==> "End of dataset" 

Dann ist dieser Wille Ausgang wird eine zufällige Charge der Größe 2 jedes Mal iterator.get_next() genannt.

Verwandte Themen