Nhầm lẫn về model.train () [trùng lặp]
Tôi là một người mới bắt đầu trong pytorch. Tôi thấy trên github rằng một số mô hình học sâu có model.train () và một số thì không, nhưng chúng có thể chạy bình thường. Tôi muốn biết liệu model.train () có cần thiết không? có tác dụng gì?
Trả lời
trainchế độ hoặc evalchế độ chỉ quan trọng khi bạn có các mô-đun hoạt động không đối xứng (ví dụ: BatchNorm, Bỏ học) trong đào tạo / thử nghiệm. Tôi muốn nhấn mạnh rằng nó hoàn toàn không ảnh hưởng đến sự tích tụ gradient. Ngay cả với các mô-đun không đối xứng, người ta có thể đào tạo hoàn hảo một mô hình ở evalchế độ. Một số làm điều này để tiết kiệm bộ nhớ khi đào tạo bằng mô hình ImageNet được đào tạo trước.
Nếu bạn không có bất kỳ mô-đun không đối xứng nào, điều đó không thành vấn đề.
Theo mặc định, tất cả các mô-đun bắt đầu bằng training=True.
trainvà đối tác của nó evalchuyển đổi mô hình giữa chế độ đào tạo và đánh giá.
Trong chế độ đào tạo, các độ dốc được theo dõi thường được cập nhật trên mỗi lần đánh giá mô hình. Điều này là cần thiết để thực hiện giảm độ dốc được sử dụng để đào tạo. Trong chế độ đánh giá, họ không.