9

Tôi khá mới đối với Tensorflow và ML nói chung, vì vậy tôi xin lỗi vì một câu hỏi nhỏ (có thể).Làm thế nào để tắt bỏ học để thử nghiệm trong Tensorflow?

Tôi sử dụng kỹ thuật bỏ học để cải thiện tỷ lệ học tập của mạng của mình và có vẻ như chỉ hoạt động tốt. Sau đó, tôi muốn thử nghiệm mạng trên một số dữ liệu để xem nếu nó hoạt động như thế này:

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

Rõ ràng, nó mang lại kết quả khác nhau mỗi lần như bỏ học vẫn được đặt ra. Một giải pháp mà tôi có thể nghĩ đến là tạo ra hai mô hình riêng biệt - một cho đào tạo và một mô hình khác để sử dụng sau này của mạng, tuy nhiên, giải pháp này dường như không thực tế đối với tôi.

Cách tiếp cận phổ biến để giải quyết vấn đề này là gì?

Trả lời

23

Cách đơn giản nhất là để thay đổi thông số keep_prob bằng cách sử dụng placeholder_with_default:

prob = tf.placeholder_with_default(1.0, shape=()) 
layer = tf.nn.dropout(layer, prob) 

theo cách này khi bạn đào tạo bạn có thể thiết lập các thông số như thế này:

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

và khi bạn đánh giá giá trị mặc định của 1.0 được sử dụng.

6

bạn nên đặt keep_prob trong lớp thả xuống dòng lưu lượng, đó là xác suất giữ được trọng số, tôi nghĩ bạn đặt biến đó với giá trị từ 0,5 đến 0,8. Khi thử nghiệm mạng bạn chỉ phải nuôi keep_prob với 1.

Bạn nên xác định một cái gì đó như thế:

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

Sau đó thay đổi các giá trị trong phiên họp:

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

Với tf.estimator API mới, bạn chỉ định một chức năng mô hình, trả về các mô hình khác nhau, dựa trên việc bạn đang đào tạo hay thử nghiệm, nhưng vẫn cho phép bạn sử dụng lại mã mô hình của mình. Trong chức năng mô hình của bạn, bạn sẽ làm điều gì đó tương tự như:

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') 
    ... 

Đối số mode được tự động chuyển tùy thuộc vào việc bạn gọi estimator.train(...) hoặc estimator.predict(...).

0

nếu bạn không muốn sử dụng Estimator API, bạn có thể tạo các học sinh bỏ học theo cách này:

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) 

Vì vậy, bạn nuôi phiên với {'tf_is_training': False} khi thực hiện đánh giá thay vì thay đổi tỷ lệ bỏ học.

Các vấn đề liên quan