2017-05-06 6 views
0

다음 theano 코드를 이해하려고합니다.theano.function의 업데이트 기능

self.sgd_step = theano.function(
      [x, y, learning_rate, theano.Param(decay, default=0.9)], 
      [], 
      updates=[(E, E - learning_rate * dE/T.sqrt(mE + 1e-6)), 
        (U, U - learning_rate * dU/T.sqrt(mU + 1e-6)), 
        (W, W - learning_rate * dW/T.sqrt(mW + 1e-6)), 
        (V, V - learning_rate * dV/T.sqrt(mV + 1e-6)), 
        (b, b - learning_rate * db/T.sqrt(mb + 1e-6)), 
        (c, c - learning_rate * dc/T.sqrt(mc + 1e-6)), 
        (self.mE, mE), 
        (self.mU, mU), 
        (self.mW, mW), 
        (self.mV, mV), 
        (self.mb, mb), 
        (self.mc, mc) 
]) 

위의 코드 작성자가 저에게 무엇을 시도 할 수 있습니까? 값 [x, y, learning_rate, theano.Param(decay, default=0.9)]이 업데이트되고 값이 []에 의해 업데이트 될 예정입니까? 그리고 여기에 updates의 기능은 무엇입니까?

위의 코드에서 어떤 일이 벌어지고 있는지 생각해 볼 수 있다면 정말 감사할까요?

답변

2

updates의 설명서는 다음과 같습니다 (here에서 가져옴).

업데이트에는 (shared-variable, new expression) 형식의 쌍 목록이 제공되어야합니다. 또한 키가 공유 변수이고 값이 새 표현식 인 사전 일 수도 있습니다. 어느 쪽이든 그것은 "이 함수가 실행될 때마다 각 공유 변수의 .value를 해당 표현식의 결과로 대체합니다"를 의미합니다. 위의 경우 누적 기가 상태 값을 상태와 증분 값의 합으로 대체합니다.

위의 theano 함수를 필요한 입력과 함께 호출하면 공유 변수 값인 E, U, W, V, b, c, ..., self.mc이 업데이트됩니다. 업데이트 될 새 값은 튜플의 두 번째 양에 의해 제공됩니다. 기본적으로 E = E - learning_rate * dE/T.sqrt(mE + 1e-6) 등입니다.