9

Genel olarak Tensorflow ve ML için yeni yaşıyorum, bu nedenle (muhtemelen) önemsiz bir soru için özür dilerim.Tensorflow'da test için bırakma nasıl kapatılır?

Ağımda öğrenme oranlarını artırmak için bırakma tekniği kullanmak ve sadece iyi çalışıyor görünüyor. Sonra ben böyle çalışıp çalışmadığını görmek için bazı verilere ağı test etmek istiyorum: bırakma hala yerinde olduğu gibi

def Ask(self, image): 
     return self.session.run(self.model, feed_dict = {self.inputPh: image}) 

Açıkçası, farklı sonuçlar her zaman verir. Düşünebildiğim bir çözüm, biri eğitim için, diğeri ağın daha sonraki bir kullanımı için olmak üzere iki ayrı model oluşturmaktır, ancak böyle bir çözüm benim için pratik değildir. Bu sorunun çözümü için ortak bir yaklaşım

nedir?

cevap

23

kolay yoludur:

keep_prob = tf.placeholder(tf.float32, name='keep_prob') 
drop = tf.contrib.rnn.DropoutWrapper(layer1, output_keep_prob=keep_prob) 

Ardından oturumda değerleri değiştirmek: şebekeyi test ederken sadece 1.

ile keep_prob beslemek gerekir Böyle bir şey tanımlamalıdır placeholder_with_default:

prob = tf.placeholder_with_default(1.0, shape=()) 
layer = tf.nn.dropout(layer, prob) 
parametresini kullanarak keep_prob parametresini değiştirmek için Bu şekilde

Eğer böyle parametreyi ayarlayabilirsiniz eğitirken:

sess.run(train_step, feed_dict={prob: 0.5}) 

ve 1.0 varsayılan değeri değerlendirirken kullanılır.

6

keep_prob, tensorflow bırakma katmanında ayarlamalısınız; bu, ağırlığın korunma olasılığıdır, bu değişkeni 0,5 ile 0,8 arasında bir değere ayarladığınızı düşünüyorum.

_ = sess.run(cost, feed_dict={'input':training_set, 'output':training_labels, 'keep_prob':0.8}) # During training 
_ = sess.run(cost, feed_dict={'input':testing_set, 'output':testing_labels, 'keep_prob':1.}) # During testing 
4

Yeni tf.estimator API ile, eğitim veya test yapıp yapmadığınıza bağlı olarak farklı modelleri döndüren, ancak yine de model kodunuzu yeniden kullanmanıza izin veren bir model işlevi belirtirsiniz.

def model_fn(features, labels, mode): 

    training = (mode == tf.estimator.ModeKeys.TRAIN) 
    ... 
    t = tf.layers.dropout(t, rate=0.25, training=training, name='dropout_1') 
    ... 

mode argüman otomatik estimator.train(...) veya estimator.predict(...) diyoruz olmasına bağlı olarak geçirilir: modeliniz işlevinde size benzer bir şey yapardı.

0

Eğer Estimator API kullanmak istemiyorsanız, sen bırakma bu şekilde oluşturabilirsiniz: değerlendirme yaptığını yerine bırakma oranını değiştirirken

tf_is_traing_pl = tf.placeholder_with_default(True, shape=()) 
tf_drop_out = tf.layers.dropout(last_output, rate=0.8, training=tf.is_training_pl) 

Yani, {'tf_is_training': False} oturumu beslerler.

İlgili konular