2015-01-29 17 views
9

Cập nhật thông số của chức năng Theano lấy danh sách cặp, trong đó mỗi cặp xác định biến biểu tượng chia sẻ và biểu thức mới sau khi tính toán kết quả đầu ra của hàm. Tôi tự hỏi liệu có bất kỳ thứ tự nào cho quy trình cập nhật hay không. Thứ tự sẽ quan trọng nếu hai biểu thức của biến biểu thức mới dựa vào nhau và quy trình cập nhật sẽ sử dụng biến biểu tượng cập nhật để cập nhật các biến biểu tượng khác dựa vào nó. Ví dụ: danh sách này có thể trông giống như thế này,Thứ tự cập nhật danh sách cập nhật chức năng của theano

[(a, b + a), (b, b+ 1)] 

Tôi đã viết một số chức năng để kiểm tra điều này. Kết quả này dường như để chứng minh rằng nó luôn luôn sử dụng giá trị cũ trong biểu thức (nhiệm kỳ thứ hai trong cặp) để cập nhật các biến mang tính biểu tượng trong nhiệm kỳ đầu tiên, ví dụ:

a_new = b_old + a_old 
b_new = b_old + 1 

Đây có phải là một hành vi được xác định?

Tuy nhiên tôi thấy việc thực hiện đà here, Dưới đây là các mã để tạo ra danh sách cập nhật và param_update biến biểu tượng

param_update = theano.shared(param.get_value()*0., broadcastable=param.broadcastable) 
updates += [(param, param - learning_rate*param_update), 
(param_update, momentum * param_update + (1. - momentum)*T.grad(cost, param)) 

Sau đó, trong phiên đầu tiên, các param sẽ không được cập nhật, vì param_updates là tất cả không. Theo hiểu biết của tôi, param_update cần được cập nhật trước, và sau đó sử dụng nó để cập nhật param.

Trả lời

7

Để cập nhật, nó luôn sử dụng giá trị trước đó (giá trị trước khi gọi hàm Theano). Vì vậy, bạn tìm thấy điều đúng.

Đối với động lượng, tôi nghĩ bình thường là có sự chậm trễ.

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