9

मैं काफी सामान्य रूप में Tensorflow और एमएल करने के लिए नया हूँ, इसलिए मैं इसके द्वारा एक (संभावना) तुच्छ प्रश्न के लिए हमें खेद है।कैसे Tensorflow में परीक्षण के लिए छोड़ने वालों बंद करने के लिए?

मैं छोड़ने वालों की तकनीक का उपयोग मेरे नेटवर्क की शिक्षा दर में सुधार करने के लिए, और यह सिर्फ अच्छा काम करने लगता है। फिर, मैं अगर यह इस तरह काम करता है देखने के लिए कुछ डेटा पर नेटवर्क परीक्षण करना चाहते हैं:

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

जाहिर है, यह अलग परिणाम हर बार पैदावार के रूप में छोड़ने वालों की जगह में अब भी है। इस तरह के एक समाधान मेरे लिए अव्यावहारिक लगता है, एक प्रशिक्षण और नेटवर्क का एक वास्तविक बाद में उपयोग के लिए एक दूसरे के लिए एक, तथापि - एक समाधान मैं के बारे में सोच सकते हैं दो अलग-अलग मॉडल बनाने के लिए है। इस समस्या को हल करने के लिए आम दृष्टिकोण

क्या है?

उत्तर

23

सबसे आसान तरीका है:

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

फिर सत्र में मूल्यों को बदल: जब नेटवर्क का परीक्षण आप बस के साथ 1.

keep_prob खिलाने चाहिए आप ऐसा ही कुछ परिभाषित करना चाहिए पैरामीटर को placeholder_with_default:

prob = tf.placeholder_with_default(1.0, shape=()) 
layer = tf.nn.dropout(layer, prob) 
का उपयोग करके पैरामीटर को बदलने के लिए

इस तरह से जब आप आप इस तरह पैरामीटर सेट कर सकते हैं प्रशिक्षित:

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

और जब आप 1.0 का डिफ़ॉल्ट मान का मूल्यांकन किया जाता है।

6

आपको keep_prob को टेंसफोर्लो ड्रॉपआउट परत में सेट करना चाहिए, जो वजन रखने की संभावना है, मुझे लगता है कि आप उस चर को 0.5 और 0.8 के बीच मानों के साथ सेट करते हैं।

_ = 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

नए tf.estimator API के साथ आप एक मॉडल फ़ंक्शन निर्दिष्ट करते हैं, जो कि आप प्रशिक्षण या परीक्षण कर रहे हैं या नहीं, इसके आधार पर विभिन्न मॉडल लौटाते हैं, लेकिन फिर भी आप अपने मॉडल कोड का पुन: उपयोग करने की अनुमति देते हैं।

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 तर्क स्वचालित रूप से है कि क्या आप estimator.train(...) या estimator.predict(...) फोन के आधार पर पारित हो जाता है: अपने मॉडल समारोह में आप के लिए कुछ इसी तरह करना होगा।

0

आप Estimator API का उपयोग नहीं करना चाहते हैं तो आपको छोड़ने वालों की इस तरह से बना सकते हैं:

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) 

तो, आप {'tf_is_training': False} साथ सत्र फ़ीड जब बजाय मूल्यांकन कर छोड़ने वालों की दर बदलने।

संबंधित मुद्दे