def get_parent_state(self, children_states, node_type, use_dropout: bool, iteration_number) -> tuple:
layer_input = T.flatten(children_states)
nn_out = self.__compute_layer_output(layer_input, node_type, use_dropout, iteration_number)
encoder_input = T.flatten(T.concatenate((children_states, nn_out))) * self.__ae_noise
encoding = T.tanh(T.dot(encoder_input, self.__encoder_weights[node_type]))
decoded = T.tanh(T.dot(encoding, self.__decoder_weights))
decoded /= decoded.norm(2) / layer_input.norm(2)
output_reconstruction = self.__compute_layer_output(decoded, node_type, use_dropout, iteration_number)
reconstruction_cos = T.dot(nn_out[0], output_reconstruction[0])
children_reconstruction_cos = T.dot(decoded, layer_input)
additional_objective = reconstruction_cos + children_reconstruction_cos
constrain_usage_pct = T.cast(1. - T.pow(self.__hyperparameters['constrain_intro_rate'], iteration_number),
theano.config.floatX)
return nn_out[0], constrain_usage_pct * additional_objective
评论列表
文章目录