triển khai fmincg trong Python


8

Tôi đang cố gắng triển khai lại Mạng nơ-ron trong Python. Tôi đã thực hiện hàm chi phí và thuật toán backpropagation một cách chính xác. Tôi đã kiểm tra chúng bằng cách thực thi mã tương đương Octave của nó.

Nhưng khi tôi đang cố gắng sử dụng scipy.optimize.fmin_cghàm, các lần lặp lại mất một thời gian rất dài để thực thi. Nó thoát với cảnh báo và đưa ra lỗi cho tôi rằng "tỷ lệ lỗi mong muốn đã không đạt được".

Chương trình tương tự trong Octave thực hiện tốt. Tuy nhiên, nó có fmincgchức năng riêng được xác định.

Tôi đang làm gì sai?


Mọi người, tôi đã gặp lỗi. Có vẻ như hạt nhân đã chết một cách bất ngờ "tôi đã làm sai ở đâu, tôi có cần phải làm gì khác để sử dụng fmin_cg để tính toán véc tơ không?
Wei Gao

Để tránh phá vỡ đối xứng, bạn nên khởi tạo params như: params = numpy.random.randn (dims) * 0,01
Shivam Singh

Câu trả lời:


6

Như một gợi ý trong tương lai, sử dụng dấu hỏi kép ?? để kéo nguồn của hàm:

Nhìn vào các nguồn scipy, thông báo lỗi này xuất hiện nếu tham số bên trong alpha_k bằng 0 hoặc Không có.

Giá trị này lần lượt được gắn với thuật toán tìm kiếm Wolfe Line nội bộ. Cụ thể, nó được gọi khi tìm kiếm không tìm thấy giá trị tốt hơn dọc theo quỹ đạo tìm kiếm. Hàm của bạn có thể có một đường viền tuyến tính ở đâu đó dọc theo nó mà trình tối ưu hóa rơi vào và bị lẫn lộn.

Có lẽ thử thêm một cuộc gọi lại và xem nơi tìm kiếm thất bại được tạo ra?


Để theo dõi điều này, scipy chọn số lần lặp tối đa của nó dựa trên kích thước của vectơ được tối ưu hóa. Đây là một dự đoán tốt hơn so với dự đoán trung bình, nhưng nên được ghi lại rõ ràng hơn.
meawoppl

2

Tôi giả sử bạn không chỉ định fprimetham số. Nếu bạn không cung cấp thông số này thì fmin_cgphải tìm ra giải pháp của chính nó, cái thường chậm hơn nhiều so với giải pháp tối ưu được cung cấp. Mã của bạn có thể trông như thế này:

theta = fmin_cg(compute_cost_reg, fprime=compute_gradient_reg,
                x0=theta, args=(X, y, lambd), maxiter=50)

0

Tôi biết đây là một câu hỏi cũ, nhưng tôi vừa phải vật lộn với một vấn đề tương tự và nghĩ rằng tôi sẽ đăng giải pháp của mình cho bất kỳ ai khác gặp phải vấn đề này.

Θ

Sau khi làm điều này, tôi đã chạy fmin_cgvới f fprime, và mặc dù nó vẫn chạy khá chậm, nhưng nó đã làm như vậy mà không có bất kỳ lỗi hay cảnh báo nào tôi đã thấy cho đến thời điểm đó.

Trong thực tế, nó thực sự đã làm tốt hơn việc giảm thiểu hàm chi phí so với việc thực hiện MATLAB, mặc dù cả hai đều có max_iters = 100.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.