Làm thế nào để ngăn chặn một mạng thần kinh chuyển hóa lười biếng? Tôi kết thúc bằng ‘CNN lười biếng’ sau khi tập luyện với KERAS. Bất kể đầu vào là gì, đầu ra là hằng số. bạn nghĩ vấn đề là gì?Làm thế nào để ngăn chặn một mạng lưới thần kinh chuyển hóa lười biếng?
Tôi cố gắng lặp lại một thử nghiệm về Kết thúc học tập kết thúc của NVIDIA cho xe tự lái the paper. Tuyệt đối, tôi không có xe hơi thực sự nhưng là simulator của Udacity. Trình mô phỏng tạo ra các số liệu về nền trước của một chiếc xe hơi.
Một CNN nhận con số này, và nó mang lại cho góc lái để giữ xe ở đường đua. Các quy tắc của trò chơi là để giữ cho chiếc xe mô phỏng chạy trong ca khúc một cách an toàn. Nó không phải là rất khó khăn.
Điều kỳ lạ đôi khi tôi kết thúc bằng CNN lười biếng sau khi đào tạo nó với KERAS, cho phép góc lái liên tục. Chiếc xe mô phỏng sẽ đi ra khỏi lừa, nhưng đầu ra của CNN không có thay đổi. Đặc biệt là lớp được sâu hơn, ví dụ: CNN trong the paper.
Nếu tôi sử dụng CNN như thế này, tôi có thể có được một mô hình hữu ích sau khi đào tạo.
model = Sequential()
model.add(Lambda(lambda x: x/255.0 - 0.5, input_shape = (160,320,3)))
model.add(Cropping2D(cropping=((70,25),(0,0))))
model.add(Conv2D(24, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Conv2D(36, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Conv2D(48, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(50))
model.add(Activation('sigmoid'))
model.add(Dense(10))
model.add(Activation('sigmoid'))
model.add(Dense(1))
Nhưng nếu tôi sử dụng CNN sâu hơn, tôi có nhiều cơ hội nhận CNN lười hơn. Cụ thể, nếu tôi sử dụng CNN thích NVIDIA, tôi gần như nhận được CNN lười biếng sau mỗi lần đào tạo.
model = Sequential()
model.add(Lambda(lambda x: x/255.0 - 0.5, input_shape = (160,320,3)))
model.add(Cropping2D(cropping=((70,25),(0,0))))
model.add(Conv2D(24, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Conv2D(36, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Conv2D(48, 5, strides=(2, 2)))
model.add(Activation('relu'))
model.add(Conv2D(64, 3, strides=(1, 1)))
model.add(Activation('relu'))
model.add(Conv2D(64, 3, strides=(1, 1)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(1164))
model.add(Activation('sigmoid'))
model.add(Dense(100))
model.add(Activation('sigmoid'))
model.add(Dense(50))
model.add(Activation('sigmoid'))
model.add(Dense(10))
model.add(Activation('sigmoid'))
model.add(Dense(1))
Tôi sử dụng ‘relu’ cho các lớp convolution và chức năng kích hoạt cho lớp được kết nối đầy đủ là ‘sigmoid’. Tôi cố gắng thay đổi chức năng kích hoạt, nhưng không có hiệu lực.
Có phân tích của tôi. Tôi không đồng ý với một lỗi trong chương trình của tôi bởi vì tôi có thể lái xe thành công với cùng một mã số và một CNN đơn giản hơn. Tôi nghĩ lý do là giả lập hoặc cấu trúc của mạng thần kinh. Trong một chiếc xe tự lái thực sự, tín hiệu đào tạo, đó là góc lái, nên có tiếng ồn; do đó, người lái xe không bao giờ giữ bánh xe vẫn còn trên đường thực. Nhưng trong giả lập, tín hiệu đào tạo rất sạch sẽ. Gần 60% góc lái là 0. Trình tối ưu hóa có thể dễ dàng thực hiện công việc bằng cách chuyển đầu ra của CNN gần bằng không. Có vẻ như người tối ưu hóa cũng lười biếng. Tuy nhiên, khi chúng ta thực sự muốn CNN xuất ra một cái gì đó, nó cũng cho số không. Vì vậy, tôi thêm tiếng ồn nhỏ cho các góc lái không. Cơ hội mà tôi nhận được một CNN lười biếng là nhỏ hơn, nhưng nó không biến mất.
Bạn nghĩ sao về phân tích của tôi? Có chiến lược nào khác mà tôi có thể sử dụng không? Tôi tự hỏi liệu các vấn đề tương tự đã được giải quyết trong lịch sử lâu dài của nghiên cứu CNN hay chưa.
nguồn:
Các tập tin có liên quan đã được tải lên GitHub. Bạn có thể lặp lại toàn bộ thử nghiệm với những tệp này.
Các tệp liên quan đã được tải lên [GitHub] https://github.com/BlueBirdHouse/CarND-Behavioral-Cloning-P3/. Bạn có thể lặp lại toàn bộ thử nghiệm với những tệp này. –
Vui lòng không sử dụng không gian nhận xét để cập nhật câu hỏi - chỉnh sửa bài đăng thay vì – desertnaut