コード例 #1
0
    def calc_loss(self, mlp_dec_state, ref_action):
        """
        Label Smoothing is implemented with reference to Section 7 of the paper
        "Rethinking the Inception Architecture for Computer Vision"
        (https://arxiv.org/pdf/1512.00567.pdf)
        """
        scores = self.get_scores(mlp_dec_state)

        if self.label_smoothing == 0.0:
            # single mode
            if not xnmt.batcher.is_batched(ref_action):
                return dy.pickneglogsoftmax(scores, ref_action)
            # minibatch mode
            else:
                return dy.pickneglogsoftmax_batch(scores, ref_action)

        else:
            log_prob = dy.log_softmax(scores)
            if not xnmt.batcher.is_batched(ref_action):
                pre_loss = -dy.pick(log_prob, ref_action)
            else:
                pre_loss = -dy.pick_batch(log_prob, ref_action)

            ls_loss = -dy.mean_elems(log_prob)
            loss = ((1 - self.label_smoothing) *
                    pre_loss) + (self.label_smoothing * ls_loss)
            return loss
コード例 #2
0
    def calc_loss(
            self, x: dy.Expression,
            y: Union[numbers.Integral,
                     List[numbers.Integral]]) -> dy.Expression:

        scores = self.calc_scores(x)

        if self.label_smoothing == 0.0:
            # single mode
            if not batchers.is_batched(y):
                loss = dy.pickneglogsoftmax(scores, y)
            # minibatch mode
            else:
                loss = dy.pickneglogsoftmax_batch(scores, y)
        else:
            log_prob = dy.log_softmax(scores)
            if not batchers.is_batched(y):
                pre_loss = -dy.pick(log_prob, y)
            else:
                pre_loss = -dy.pick_batch(log_prob, y)

            ls_loss = -dy.mean_elems(log_prob)
            loss = ((1 - self.label_smoothing) *
                    pre_loss) + (self.label_smoothing * ls_loss)

        return loss
コード例 #3
0
 def cross_entropy_loss(self, scores, next_words):
     if self.label_smoothing:
         log_softmax = dy.log_softmax(scores)
         return -dy.pick_batch(log_softmax, next_words) * (1 - self.label_smoothing) \
                - dy.mean_elems(log_softmax) * self.label_smoothing
     else:
         return dy.pickneglogsoftmax_batch(scores, next_words)
コード例 #4
0
ファイル: scorers.py プロジェクト: rezahaffari/xnmt
    def calc_loss(
            self, x: dy.Expression,
            y: Union[numbers.Integral,
                     List[numbers.Integral]]) -> dy.Expression:
        if self.can_loss_be_derived_from_scores():
            scores = self.calc_scores(x)
            # single mode
            if not batchers.is_batched(y):
                loss = dy.pickneglogsoftmax(scores, y)
            # minibatch mode
            else:
                loss = dy.pickneglogsoftmax_batch(scores, y)
        else:
            log_prob = self.calc_log_probs(x)
            if not batchers.is_batched(y):
                loss = -dy.pick(log_prob, y)
            else:
                loss = -dy.pick_batch(log_prob, y)

            if self.label_smoothing > 0:
                ls_loss = -dy.mean_elems(log_prob)
                loss = ((1 - self.label_smoothing) *
                        loss) + (self.label_smoothing * ls_loss)

        return loss
コード例 #5
0
    def pick_cos_prox(pred, gold):

        def l2_normalize(x):
            epsilon = np.finfo(float).eps * dy.ones(pred.dim()[0])
            norm = dy.sqrt(dy.sum_elems(dy.square(x)))
            sign = dy.cdiv(x, dy.bmax(dy.abs(x), epsilon))
            return dy.cdiv(dy.cmult(sign, dy.bmax(dy.abs(x), epsilon)), dy.bmax(norm, epsilon[0]))

        y_true = l2_normalize(pred)
        y_pred = l2_normalize(gold)

        return dy.mean_elems(dy.cmult(y_true, y_pred))
コード例 #6
0
ファイル: Seq2Seq.py プロジェクト: HsiaoYetGun/MiRLocator
	def cross_entropy_loss(self, score, next_word, cur_word):
		if self.__ls:
			log_prob = dy.log_softmax(score)
			if self.__lm is None:
				loss = - dy.pick_batch(log_prob, next_word) * (1 - self.__ls_eps) - \
					dy.mean_elems(log_prob) * self.__ls_eps
			else:
				loss = - dy.pick_batch(log_prob, next_word) * (1 - self.__ls_eps) - \
					dy.dot_product(self.__lm.next_expr(cur_word), log_prob) * self.__ls_eps
		else:
			loss = dy.pickneglogsoftmax(score, next_word)
		return loss
コード例 #7
0
  def GetPOSIT(self, qvecs, sims, w2v_sims, matches):
    qscores = []
    for qtok in range(len(qvecs)):
      # Basic matches, max-sim, average-kmax-sim, exact match
      svec = dy.concatenate(sims[qtok])
      sim = dy.kmax_pooling(dy.transpose(svec), 1)[0]
      sim5 = dy.mean_elems(dy.kmax_pooling(dy.transpose(svec), 5)[0])
      wvec = dy.concatenate(w2v_sims[qtok])
      wsim = dy.kmax_pooling(dy.transpose(wvec), 1)[0]
      wsim5 = dy.mean_elems(dy.kmax_pooling(dy.transpose(wvec), 5)[0])
      mvec = dy.concatenate(matches[qtok])
      msim = dy.kmax_pooling(dy.transpose(mvec), 1)[0]
      msim5 = dy.mean_elems(dy.kmax_pooling(dy.transpose(mvec), 5)[0])
      layer1 = (self.W_term1.expr() *
                dy.concatenate(
                    [sim, sim5,
                     wsim, wsim5,
                     msim, msim5
                    ]) +
                self.b_term1.expr())
      qscores.append(self.W_term.expr() * utils.leaky_relu(layer1))

    return qscores
コード例 #8
0
 def cross_entropy_loss(self, s, nw, cw):
     """Calculates the cross-entropy
     """
     if self.ls:
         log_prob = dy.log_softmax(s)
         if self.lm is None:
             loss = - dy.pick_batch(log_prob, nw) * (1 - self.ls_eps) - \
                 dy.mean_elems(log_prob) * self.ls_eps
         else:
             loss = - dy.pick_batch(log_prob, nw) * (1 - self.ls_eps) - \
                 dy.dot_product(self.lm_e, log_prob) * self.ls_eps
     else:
         loss = dy.pickneglogsoftmax_batch(s, nw)
     return loss
コード例 #9
0
ファイル: ops.py プロジェクト: aka-zyq/Event-Extraction-2
def mean(x, dim=None, include_batch_dim=False):
    if isinstance(x, list):
        return dy.average(x)
    head_shape, batch_size = x.dim()
    if dim is None:
        # warning: dynet only implement 2 or lower dims for mean_elems
        x =  dy.mean_elems(x)
        if include_batch_dim and batch_size > 1:
            return dy.mean_batches(x)
        else:
            return x
    else:
        if dim == -1:
            dim = len(head_shape) - 1
        return dy.mean_dim(x, d=[dim], b=include_batch_dim)
コード例 #10
0
    def calc_loss(self, mlp_dec_state, ref_action):
        scores = self.get_scores(mlp_dec_state)

        if self.label_smoothing == 0.0:
            # single mode
            if not xnmt.batcher.is_batched(ref_action):
                return dy.pickneglogsoftmax(scores, ref_action)
            # minibatch mode
            else:
                return dy.pickneglogsoftmax_batch(scores, ref_action)

        else:
            log_prob = dy.log_softmax(scores)
            if not xnmt.batcher.is_batched(ref_action):
                pre_loss = -dy.pick(log_prob, ref_action)
            else:
                pre_loss = -dy.pick_batch(log_prob, ref_action)

            ls_loss = -dy.mean_elems(log_prob)
            loss = ((1 - self.label_smoothing) *
                    pre_loss) + (self.label_smoothing * ls_loss)
            return loss
コード例 #11
0
ファイル: layer_norm.py プロジェクト: ren98feng/antu
 def __call__(self, x):
     # mean = x.mean(-1, keepdim=True)
     mean = dy.mean_elems(x)
     # std = x.std(-1, keepdim=True)
     std = dy.std(x)
     return self.a_2 * (x - mean) / (std + self.eps) + self.b_2
コード例 #12
0
def mse_loss(predictions, target):
    diff = predictions - target
    square = dy.square(diff)
    mean = dy.mean_elems(square)

    return mean
コード例 #13
0
ファイル: policy_gradient.py プロジェクト: rezahaffari/xnmt
  def calc_loss(self, policy_reward, results={}):
    """
    Calc policy networks loss.
    """
    assert len(policy_reward) == len(self.states), "There should be a reward for every action taken"
    batch_size = self.states[0].dim()[1]
    loss = {}

    # Calculate the baseline loss of the reinforce loss for each timestep:
    # b = W_b * s + b_b
    # R = r - b
    # Also calculate the baseline loss
    # b = r_p (predicted)
    # loss_b = squared_distance(r_p - r_r)
    rewards = []
    baseline_loss = []
    units = np.zeros(batch_size)
    for i, state in enumerate(self.states):
      r_p = self.baseline.transform(dy.nobackprop(state))
      rewards.append(policy_reward[i] - r_p)
      if self.valid_pos[i] is not None:
        r_p = dy.pick_batch_elems(r_p, self.valid_pos[i])
        r_r = dy.pick_batch_elems(policy_reward[i], self.valid_pos[i])
        units[self.valid_pos[i]] += 1
      else:
        r_r = policy_reward[i]
        units += 1
      baseline_loss.append(dy.sum_batches(dy.squared_distance(r_p, r_r)))
    loss["rl_baseline"] = losses.LossExpr(dy.esum(baseline_loss), units)

    # Z Normalization
    # R = R - mean(R) / std(R)
    rewards = dy.concatenate(rewards, d=0)
    r_dim = rewards.dim()
    if self.z_normalization:
      rewards_shape = dy.reshape(rewards, (r_dim[0][0], r_dim[1]))
      rewards_mean = dy.mean_elems(rewards_shape)
      rewards_std = dy.std_elems(rewards_shape) + 1e-20
      rewards = (rewards - rewards_mean.value()) / rewards_std.value()
    rewards = dy.nobackprop(rewards)
    # Calculate Confidence Penalty
    if self.confidence_penalty:
      loss["rl_confpen"] = self.confidence_penalty.calc_loss(self.policy_lls)

    # Calculate Reinforce Loss
    # L = - sum([R-b] * pi_ll)
    reinf_loss = []
    units = np.zeros(batch_size)
    for i, (policy, action) in enumerate(zip(self.policy_lls, self.actions)):
      reward = dy.pick(rewards, i)
      ll = dy.pick_batch(policy, action)
      if self.valid_pos[i] is not None:
        ll = dy.pick_batch_elems(ll, self.valid_pos[i])
        reward = dy.pick_batch_elems(reward, self.valid_pos[i])
        units[self.valid_pos[i]] += 1
      else:
        units += 1
      reinf_loss.append(dy.sum_batches(dy.cmult(ll, reward)))
    loss["rl_reinf"] = losses.LossExpr(-dy.esum(reinf_loss), units)

    # Pack up + return
    return losses.FactoredLossExpr(loss)
コード例 #14
0
ファイル: ES-MLP.py プロジェクト: karkuffka/M3-forecast
newSeason.append(newSeason[0])
newLevels.append(1 * dy.cdiv(y[0], newSeason[0]))
#perform smoothing
for i in range(1, len(df)):
    newLevels.append(levelSm * dy.cdiv(y[i], newSeason[i]) +
                     (1 - levelSm) * newLevels[i - 1])
    newSeason.append(seasonSm * dy.cdiv(y[i], newLevels[i]) +
                     (1 - seasonSm) * newSeason[i])
s = dy.concatenate(newSeason)
l = dy.concatenate(newLevels)

#penalize sudden level changes (should be scale independent - it is dependent)\
#should penalize 2nd derivative
l_log_diff = dy.log(dy.cdiv(l[1:], l[0:l.dim()[0][0] - 1]))
l_penalty = l_log_diff[1:] - l_log_diff[0:l_log_diff.dim()[0][0] - 1]
level_loss = dy.mean_elems(dy.square(l_penalty)) * 10
print(level_loss.value())

preds = []
outputs = []

#wez y i usun sezonowosc i level
for i in range(n, len(df) - h):
    inputs = y[i - n:i]  #n okresy
    curr_season = s[i - n:i]
    inputs = dy.cdiv(inputs, l[i])
    inputs = dy.cdiv(inputs, curr_season)
    inputs = dy.log(inputs)
    reseasonalize = s[i + 1]  #poprzedni okres +1 krok
    preds.append(dy.exp(fcstr(inputs)) * l[i] * reseasonalize)
    outputs.append(y[i + 1])  #+1 krok