2016-05-02 49 views
5

Tôi nhận thấy có chức năng chuẩn hóa hàng loạt đã có trong api cho tensorflow. Một điều tôi không hiểu, là làm thế nào để thay đổi thủ tục giữa đào tạo và kiểm tra?Batch chuẩn hóa trong tensorflow

Việc chuẩn hóa hàng loạt hoạt động khác nhau trong quá trình thử nghiệm so với trong quá trình đào tạo. Cụ thể, người ta sử dụng một phương tiện cố định và phương sai trong quá trình đào tạo.

Có một số mã mẫu tốt ở đâu đó không? Tôi thấy một số, nhưng với các biến phạm vi nó đã gây nhầm lẫn

+0

Xem xét sử dụng các lớp được xác định trước từ apis cấp cao như 'tf.contrib .layers'. – danijar

Trả lời

9

Bạn nói đúng, tf.nn.batch_normalization chỉ cung cấp chức năng cơ bản để thực hiện bình thường hóa hàng loạt. Bạn phải thêm logic bổ sung để theo dõi di chuyển phương tiện và phương sai trong quá trình đào tạo, và sử dụng các phương tiện được đào tạo và phương sai trong suy luận. Bạn có thể nhìn vào example này cho một thực hiện rất chung chung, nhưng một phiên bản nhanh chóng mà không sử dụng gamma là ở đây:

beta = tf.Variable(tf.zeros(shape), name='beta') 
    moving_mean = tf.Variable(tf.zeros(shape), name='moving_mean', 
           trainable=False) 
    moving_variance = tf.Variable(tf.ones(shape), 
            name='moving_variance', 
            trainable=False) 
    control_inputs = [] 
    if is_training: 
    mean, variance = tf.nn.moments(image, [0, 1, 2]) 
    update_moving_mean = moving_averages.assign_moving_average(
     moving_mean, mean, self.decay) 
    update_moving_variance = moving_averages.assign_moving_average(
     moving_variance, variance, self.decay) 
    control_inputs = [update_moving_mean, update_moving_variance] 
    else: 
    mean = moving_mean 
    variance = moving_variance 
    with tf.control_dependencies(control_inputs): 
    return tf.nn.batch_normalization(
     image, mean=mean, variance=variance, offset=beta, 
     scale=None, variance_epsilon=0.001) 
+0

Cảm ơn bạn rất nhiều. Một câu hỏi nhanh khác. Là một phiên bản với gamma thực sự phức tạp hơn? có vẻ như bạn sẽ phải khởi tạo một tf.Variable khác cho nó? Phần còn lại của mã phải giống nhau, phải không? – user3358117

+0

Có, bạn có thể theo dõi việc triển khai tổng quát hơn trong liên kết mà tôi đã cung cấp để thêm 'gamma'. – keveman

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