2015-12-24 17 views
5

Đối với một ConvNet, có thể thú vị khi tìm đầu vào giới hạn theo chuẩn mà tối đa hóa hoạt động của một chuyển đổi đơn. lọc theo cách đến visualize the filters. Tôi muốn làm điều này trong gói học tập sâu Keras. Điều này có thể được thực hiện bằng cách sử dụng thuật toán tối ưu hóa hộp đen với mã từ FAQ.Gradient từ biểu thức Theano để hiển thị bộ lọc trong Keras

# with a Sequential model 
get_3rd_layer_output = theano.function([model.layers[0].input], 
             model.layers[3].get_output(train=False)) 
layer_output = get_3rd_layer_output(X) 

Tuy nhiên, nó sẽ là một tác vụ tối ưu hóa đáng kể dễ dàng hơn nếu tôi có độ dốc. Làm thế nào tôi có thể trích xuất gradient từ biểu thức Theano và nhập nó vào một thư viện tối ưu hóa Python như Scipy?

Trả lời

2

Bạn có thể in ra độ dốc như được mô tả here và đặt mã nó vào Scipy. Bạn cũng có thể thực hiện tối ưu hóa trong Theano - xem this question.

Tuy nhiên, có lẽ là cách tiếp cận hầu hết thẳng về phía trước là để tạo một hàm get_gradients() sử dụng theano.grad() để trả lại gradient của các bộ lọc liên quan đến một đầu vào, sau đó gọi scipy.optimize.minimize với jac=get_gradients. Theo số documentation:

jac: bool hoặc có thể gọi, tùy chọn Jacobian (gradient) của mục tiêu chức năng. [...] jac cũng có thể được gọi trở lại gradient của mục tiêu. Trong trường hợp này, nó phải chấp nhận các đối số giống như niềm vui.

+0

Cảm ơn. Tôi hiểu ý tưởng cơ bản đằng sau 'theano.grad()', nhưng làm thế nào tôi có thể trích xuất các gradient đối với sự mất mát của một mô hình Keras? Dựa trên https://github.com/fchollet/keras/blob/master/examples/conv_filter_visualization.py Tôi đã thấy cách này có thể được thực hiện bằng cách sử dụng một số đầu vào 'X_train', nhưng tôi đã không tìm ra cách để làm điều này cho sự mất mát. Hai vấn đề của tôi là 1) Tôi dường như không thể trích xuất chức năng mất khi kết nối với mạng 2) Chức năng mới này cần cả 'X_train' và' y_train', mà dường như tôi không thể cung cấp đúng cách. – pir

+0

Keras đã tính toán độ dốc của sự mất mát đối với từng lớp, trong quá trình truyền ngược. Nhưng bạn không muốn các gradient của một lớp trung gian đối với đầu vào? –

+0

Ah, vâng. Xin lỗi, đã lâu rồi tôi mới hỏi câu hỏi. Câu trả lời của bạn giải quyết nó. Vấn đề hiện tại của tôi là làm thế nào để trích xuất các gradient trên tất cả các tham số wrt. sự mất mát khi tôi muốn kiểm tra sự cần thiết phải cắt giảm gradient. Đó có phải là dễ dàng để có được từ sự chứng minh backprop như thực hiện trong Keras? – pir

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