def build(self): if self.stateful: self.reset_states() else: self.states = [None, None] self.W_s = self.init((self.output_dim, self.output_dim)) self.W_t = self.init((self.output_dim, self.output_dim)) self.W_a = self.init((self.output_dim, self.output_dim)) self.w_e = K.zeros((self.output_dim,)) self.W_i = self.init((2 * self.output_dim, self.output_dim)) self.U_i = self.inner_init((self.output_dim, self.output_dim)) self.b_i = K.zeros((self.output_dim,)) self.W_f = self.init((2 * self.output_dim, self.output_dim)) self.U_f = self.inner_init((self.output_dim, self.output_dim)) self.b_f = self.forget_bias_init((self.output_dim,)) self.W_c = self.init((2 * self.output_dim, self.output_dim)) self.U_c = self.inner_init((self.output_dim, self.output_dim)) self.b_c = K.zeros((self.output_dim,)) self.W_o = self.init((2 * self.output_dim, self.output_dim)) self.U_o = self.inner_init((self.output_dim, self.output_dim)) self.b_o = K.zeros((self.output_dim,)) self.trainable_weights = [self.W_s, self.W_t, self.W_a, self.w_e, self.W_i, self.U_i, self.b_i, self.W_c, self.U_c, self.b_c, self.W_f, self.U_f, self.b_f, self.W_o, self.U_o, self.b_o]
def reset_states(self): assert self.stateful, 'Layer must be stateful.' if hasattr(self, 'states'): K.set_value(self.states[0], np.zeros((self.batch_size, self.output_dim))) K.set_value(self.states[1], np.zeros((self.batch_size, self.output_dim))) else: self.states = [K.zeros((self.batch_size, self.output_dim)), K.zeros((self.batch_size, self.output_dim))]
def get_initial_states(self, X): # build an all-zero tensor of shape (samples, output_dim) initial_state = K.zeros_like(X) # (samples, timesteps, input_dim) initial_state = K.sum(initial_state, axis=1) # (samples, input_dim) reducer = K.zeros((self.output_dim, self.output_dim)) initial_state = K.dot(initial_state, reducer) # (samples, output_dim) initial_states = [initial_state for _ in range(len(self.states))] return initial_states
def get_initial_states(self, x): # build an all-zero tensor of shape (samples, output_dim) initial_state = K.zeros_like(x) # (samples, timesteps, input_dim) initial_state = K.sum(initial_state, axis=1) # (samples, input_dim) reducer = K.zeros((self.input_dim, self.output_dim)) initial_state = K.dot(initial_state, reducer) # (samples, output_dim) initial_states = [initial_state for _ in range(len(self.states))] if self.feed_layer is not None: initial_states[1] = self.feed_layer return initial_states
def build(self, input_shape): self.input_spec = [InputSpec(shape=shape) for shape in input_shape] input_dim = input_shape[1][2] self.input_dim = input_dim if self.stateful: self.reset_states() else: self.states = [None, None] self.W_s = self.init((self.output_dim, self.output_dim)) self.W_t = self.init((self.output_dim, self.output_dim)) self.W_a = self.init((self.output_dim, self.output_dim)) self.w_e = K.zeros((self.output_dim,)) self.W_i = self.init((2 * self.output_dim, self.output_dim)) self.U_i = self.inner_init((self.output_dim, self.output_dim)) self.b_i = K.zeros((self.output_dim,)) self.W_f = self.init((2 * self.output_dim, self.output_dim)) self.U_f = self.inner_init((self.output_dim, self.output_dim)) self.b_f = self.forget_bias_init((self.output_dim,)) self.W_c = self.init((2 * self.output_dim, self.output_dim)) self.U_c = self.inner_init((self.output_dim, self.output_dim)) self.b_c = K.zeros((self.output_dim,)) self.W_o = self.init((2 * self.output_dim, self.output_dim)) self.U_o = self.inner_init((self.output_dim, self.output_dim)) self.b_o = K.zeros((self.output_dim,)) self.trainable_weights = [self.W_s, self.W_t, self.W_a, self.w_e, self.W_i, self.U_i, self.b_i, self.W_c, self.U_c, self.b_c, self.W_f, self.U_f, self.b_f, self.W_o, self.U_o, self.b_o]
def build(self, input_shape): self.input_spec = [InputSpec(shape=shape) for shape in input_shape] input_dim = input_shape[1][2] self.input_dim = input_dim if self.stateful: self.reset_states() else: self.states = [None, None] self.W_s = self.init((self.output_dim, self.output_dim)) self.W_t = self.init((self.output_dim, self.output_dim)) self.W_a = self.init((self.output_dim, self.output_dim)) self.w_e = K.zeros((self.output_dim, )) self.W_i = self.init((2 * self.output_dim, self.output_dim)) self.U_i = self.inner_init((self.output_dim, self.output_dim)) self.b_i = K.zeros((self.output_dim, )) self.W_f = self.init((2 * self.output_dim, self.output_dim)) self.U_f = self.inner_init((self.output_dim, self.output_dim)) self.b_f = self.forget_bias_init((self.output_dim, )) self.W_c = self.init((2 * self.output_dim, self.output_dim)) self.U_c = self.inner_init((self.output_dim, self.output_dim)) self.b_c = K.zeros((self.output_dim, )) self.W_o = self.init((2 * self.output_dim, self.output_dim)) self.U_o = self.inner_init((self.output_dim, self.output_dim)) self.b_o = K.zeros((self.output_dim, )) self.trainable_weights = [ self.W_s, self.W_t, self.W_a, self.w_e, self.W_i, self.U_i, self.b_i, self.W_c, self.U_c, self.b_c, self.W_f, self.U_f, self.b_f, self.W_o, self.U_o, self.b_o ]