TensorFlow ile basit bir çok katmanlı algılayıcı yapıyorum ve sinir ağının girişlerindeki kaymanın degradelerini (veya hata sinyalini) almam gerekiyor.TensorFlow: girişlerde degradeler alınırken yavaş performans
İşte çalışır benim kod verilmiştir:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(self.network, self.y))
optimizer = tf.train.AdagradOptimizer(learning_rate=nn_learning_rate).minimize(cost)
...
for i in range(epochs):
....
for batch in batches:
...
sess.run(optimizer, feed_dict=feed_dict)
grads_wrt_input = sess.run(tf.gradients(cost, self.x), feed_dict=feed_dict)[0]
son satırı (grads_wrt_input...
) olmadan
(eğitim döngü içerecek şekilde düzenlenmiş), bu gerçekten hızlı bir CUDA makinede çalışır. Ancak, tf.gradients()
, performansı on kat ya da daha fazla büyük oranda azaltır.
Geri tepme algoritmasında düğümlerdeki hata sinyallerinin ara değerler olarak hesaplandığını hatırlıyorum ve bunu başarıyla DeepLearning4j Java kütüphanesini kullanarak yaptım. Ayrıca, bu zaten optimizer
tarafından yapılan hesaplama grafiği için hafif bir değişiklik olacağını izlenim altındaydı.
Bu nasıl daha hızlı yapılabilir veya kayıpların gradyanlarını hesaplamak için başka bir yol var mıdır? girişler?
Gerçekten de eğitim döngüsünde tf.gradients() 'i mi çağırıyorsunuz? Eğer öyleyse, ek yükü her aradığınızda arka plan grafiği oluşturduğundan şüpheliyim? – mrry
Eğitim döngü kodunu netlik için ekledim; evet eğitim döngüsünde tf.gradients() işlevini arıyorum. Program, aşamalı olarak yavaşlar. Bu binanın önünü önlemek için ne yapmalıyım? –
Degradeler için hesaplama grafiğini bir kez oluşturmak için döngü dışındaki tf.gradients öğesini çağırın. Ayrıca compute_gradients –