2017-12-05 4 views
0

학습 된 LSTM 모델에 대한 간단한 평가 (즉, 순방향 전달)를 시도하고 있으며 z에서 f_t, i_t, o_t, c_in을 추출 할 수있는 순서를 알 수 없습니다. 그것들은 대량으로 계산된다는 것을 이해합니다. enter image description hereKeras의 LSTM 가중치 순서

내 입력 시퀀스가 ​​:

input_seq = np.array([[[0.725323664], 
        [0.7671179], 
        [0.805884672]]]) 

는 출력 같아야 Keras 사용

[ 0.83467698] 

, 난에 대해 다음 파라미터를 얻은 다음 는 Keras를 사용하여 얻어진 모델 아키텍쳐 제 1 LSTM 층 :

lstm_1_kernel_0 = np.array([[-0.40927699, -0.53539848, 0.40065038, -0.07722378, 0.30405849, 0.54959822, -0.23097005, 0.4720422, 0.05197877, -0.52746099, -0.5856396, -0.43691438]]) 

lstm_1_recurrent_kernel_0 = np.array([[-0.25504839, -0.0823682, 0.11609183, 0.41123426, 0.03409858, -0.0647027, -0.59183347, -0.15359771, 0.21647622, 0.24863823, 0.46169096, -0.21100986], 
            [0.29160395, 0.46513283, 0.33996364, -0.31195125, -0.24458826, -0.09762905, 0.16202784, -0.01602131, 0.34460208, 0.39724654, 0.31806156, 0.1102117], 
            [-0.15919448, -0.33053166, -0.22857222, -0.04912394, -0.21862955, 0.55346996, 0.38505834, 0.18110731, 0.270677, -0.02759281, 0.42814475, -0.13496138]]) 
lstm_1_bias_0 = np.array([0., 0., 0., 1., 1., 1., 0., 0., 0., 0., 0., 0.]) 

# LSTM 1 
z_1_lstm_1 = np.dot(x_1_lstm_1, lstm_1_kernel_0) + np.dot(h_0_lstm_1, lstm_1_recurrent_kernel_0) + lstm_1_bias_0 
i_1_lstm_1 = z_1_lstm_1[0, 0:3] 
f_1_lstm_1 = z_1_lstm_1[0, 3:6] 
input_to_c_1_lstm_1 = z_1_lstm_1[0, 6:9] 
o_1_lstm_1 = z_1_lstm_1[0, 9:12] 

i_1_lstm_1, f_1_lstm_1, input_to_c_1_lstm_1, o_1_lstm_1에 올바른 순서는 무엇입니까?

답변

0

그것은 (i, f, c, o)입니다. https://stackoverflow.com/questions 수작업으로 패스 그러나 나는 아직도 앞으로 간단한 고민하고,

self.kernel_i = self.kernel[:, :self.units] 
    self.kernel_f = self.kernel[:, self.units: self.units * 2] 
    self.kernel_c = self.kernel[:, self.units * 2: self.units * 3] 
    self.kernel_o = self.kernel[:, self.units * 3:] 

    self.recurrent_kernel_i = self.recurrent_kernel[:, :self.units] 
    self.recurrent_kernel_f = self.recurrent_kernel[:, self.units: self.units * 2] 
    self.recurrent_kernel_c = self.recurrent_kernel[:, self.units * 2: self.units * 3] 
    self.recurrent_kernel_o = self.recurrent_kernel[:, self.units * 3:] 

    if self.use_bias: 
     self.bias_i = self.bias[:self.units] 
     self.bias_f = self.bias[self.units: self.units * 2] 
     self.bias_c = self.bias[self.units * 2: self.units * 3] 
     self.bias_o = self.bias[self.units * 3:] 
+0

물론 그런 경우가 될 것으로 보인다 : recurrent.py에서 LSTMCell에서 가중치에 의해 구성된다/47702234/foward-pass-in-lstm-netwok-learned-by-keras – valentin

관련 문제