import tensorflow as tf

            self.normal_dist = tf.contrib.distributions.Normal(self.mu, self.sigma)
            self.action = tf.squeeze(self.normal_dist.sample(1),axis=0);
            self.action = tf.clip_by_value(self.action, action_bound[0], action_bound[1])

            # Loss and train op
            self.loss = -self.normal_dist.log_prob(self.a_his) * self.target
            # Add cross entropy cost to encourage exploration
            self.loss -= entropy_beta * self.normal_dist.entropy()
            self.optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
            self.grads_and_vars = self.optimizer.compute_gradients(self.loss)
            self.grads=[];
            self.vars=[];
            for i in range(len(self.grads_and_vars)):
                self.grads.append(self.grads_and_vars[i][0]);
                self.vars.append(self.grads_and_vars[i][1]);
            self.grads=self.grads[-1*NUM_VARS:];
