2017-11-25 3 views
2

Kürzlich möchte ich das GAN-Modell implementieren und tf.Dataset und Iterator verwenden, um Gesichtsbilder als Trainingsdaten zu lesen.Wie bekomme ich den besten Batch nach dem Ausführen von Iteration.get_next() in Tensorflow?

der Datenmenge und Iteratorobjekt Code ist:

self.dataset = tf.data.Dataset.from_tensor_slices(convert_to_tensor(self.data_ob.train_data_list, dtype=tf.string)) 
self.dataset = self.dataset.map(self._parse_function) 
#self.dataset = self.dataset.shuffle(buffer_size=10000) 
self.dataset = self.dataset.apply(tf.contrib.data.batch_and_drop_remainder(batch_size)) 

self.iterator = tf.data.Iterator.from_structure(self.dataset.output_types, self.dataset.output_shapes) 
self.next_x = self.iterator.get_next() 

Mein neues GAN-Modell ist:

self.z_mean, self.z_sigm = self.Encode(self.next_x) 
self.z_x = tf.add(self.z_mean, tf.sqrt(tf.exp(self.z_sigm))*self.ep) 
self.x_tilde = self.generate(self.z_x, reuse=False) 
#the feature 
self.l_x_tilde, self.De_pro_tilde = self.discriminate(self.x_tilde) 

#for Gan generator 
self.x_p = self.generate(self.zp, reuse=True) 
# the loss of dis network 
self.l_x, self.D_pro_logits = self.discriminate(self.next_x, True) 

Also, das Problem ist, dass ich die self.next_x als Eingang Tensor zweimal verwenden. Der Datensatz für jedes Mal ist anders. So, wie man dieses Problem löst, um den ersten Stapel für die Wiederverwendung zu behalten?

Antwort

1

Was ich in meinem Code verwenden, ist die folgende, wo x und y_true Platzhalter sind. Nicht sicher, ob es effizientere Implementierungen gibt.

images, labels = session.run(next_element) 
batch_accuracy = session.run(accuracy, feed_dict={x: images, y_true: labels, keep_prop: 1.0}) 
batch_predicted_probabilities = session.run(y_pred, feed_dict={x: images, y_true: labels, keep_prop: 1.0}) 

Ich versuche derzeit tf.placeholder_with_default anstelle der normalen Platzhalter für x und y_true zu verwenden, um zu überprüfen, ob es eine bessere Leistung in meinem Projekt gibt. Ich werde meine Antwort bearbeiten, um Sie wissen zu lassen, ob ich bald Ergebnisse erzielen kann :).

Edit: Ich wechselte placeholder_with_default und es gab keine nennenswerte Verbesserung der Geschwindigkeit pro Charge, zumindest in der Art, wie ich es bin zu messen.

+0

danke, ich denke, dieses Gerät ist richtig. – zhangqianhui

+0

Jederzeit. Bitte implementieren Sie es und wenn es funktioniert und keine besseren Antworten gegeben werden, markieren Sie meine Antwort als richtig! –

+0

Was ist gut genug oder schlecht für Ihren Fall? Ich wechselte zu placeholder_with_default und es gab keine spürbare Verbesserung der Geschwindigkeit pro Batch, zumindest in der Art, wie ich es gemessen habe. –

Verwandte Themen