コード例 #1
0
ファイル: nnet.py プロジェクト: awesome-archive/Dragon
def softmax(c):
    """Softmax function.

    The ``c`` should be a matrix, without any spatial axes.

    Parameters
    ----------
    c : Tensor
        The input tensor.

    Returns
    -------
    Tensor
        The output tensor.

    """
    return ops.Softmax(c, axis=1)
コード例 #2
0
    def _create_graph(self):
        self.x = Tensor(shape=[None, self.img_channels, self.img_height, self.img_width]).Variable()
        self.y_r = Tensor(shape=[None], name='Yr').Variable()

        # As implemented in A3C paper
        self.n1 = ops.Relu(ops.Conv2D([self.x] + self.weight_bias(), kernel_size=8, stride=4, num_output=16))
        self.n2 = ops.Relu(ops.Conv2D([self.n1] + self.weight_bias(), kernel_size=4, stride=2, num_output=32))

        self.action_index = Tensor(shape=[None, self.num_actions]).Variable()

        self.d1 = ops.Relu(ops.InnerProduct([self.n2] + self.weight_bias(), num_output=256))

        self.logits_v = ops.InnerProduct([self.d1] + self.weight_bias(), num_output=1)
        self.cost_v = ops.L2Loss([self.y_r, self.logits_v])

        self.logits_p = ops.InnerProduct([self.d1] + self.weight_bias(), num_output=self.num_actions)

        if Config.USE_LOG_SOFTMAX: raise NotImplementedError()
        else:
            self.softmax_p = ops.Softmax(self.logits_p)
            self.selected_action_prob = ops.Sum(self.softmax_p * self.action_index, axis=1)
            self.cost_p_1 = ops.Log(ops.Clip(self.selected_action_prob, self.log_epsilon, None)) * \
                            (self.y_r - ops.StopGradient(self.logits_v))
            self.cost_p_2 = ops.Sum(ops.Log(ops.Clip(self.softmax_p, self.log_epsilon, None)) *
                                      self.softmax_p, axis=1) * (-self.beta)
        self.cost_p_1_agg = ops.Sum(self.cost_p_1)
        self.cost_p_2_agg = ops.Sum(self.cost_p_2)
        self.cost_p = -(self.cost_p_1_agg + self.cost_p_2_agg)
        self.cost_all = self.cost_p + self.cost_v
        
        if Config.DUAL_RMSPROP: raise NotImplementedError()
        else:
            if Config.USE_GRAD_CLIP:
                self.opt = updaters.RMSPropUpdater(decay=Config.RMSPROP_DECAY,
                                                   eps=Config.RMSPROP_EPSILON,
                                                   clip_gradient=Config.GRAD_CLIP_NORM)
            else:
                self.opt = updaters.RMSPropUpdater(decay=Config.RMSPROP_DECAY,
                                                   eps=Config.RMSPROP_EPSILON)

        grads = T.grad(self.cost_all, self.network_params)
        for p, g in zip(self.network_params, grads):
            self.opt.append((p, g), lr_mult=1.0)
コード例 #3
0
def softmax(logits, dim=-1, name=None):
    """
    Computes softmax activations.

      For each batch `i` and class `j` we have

      softmax = exp(logits) / reduce_sum(exp(logits), dim)

     Args:
       logits: A non-empty `Tensor`.
       dim: The dimension softmax would be performed on. The default is -1 which
            indicates the last dimension.
       name: A name for the operation (optional).

     Returns:
        A `Tensor`. Has the same type as `logits`. Same shape as `logits`.

    """

    return ops.Softmax(logits, axis=dim)
コード例 #4
0
ファイル: common.py プロジェクト: yyaqi/Dragon
 def LayerSetup(self, bottom):
     return _ops.Softmax(bottom, **self.arguments)
コード例 #5
0
ファイル: nn_ops.py プロジェクト: k9sret/Dragon
def softmax(logits, dim=-1, name=None):

    return ops.Softmax(logits, axis=dim)
コード例 #6
0
 def Setup(self, bottom):
     super(SoftmaxLayer, self).Setup(bottom)
     input = bottom[0] if isinstance(bottom, list) else bottom
     return ops.Softmax(input, **self._param)