(self, y_true, input_energy, mask)
return total_energy
Energy = a1' y1 + u1' y1 + y1' U y2 + u2' y2 + y2' U y3 + u3' y3 + an' y3
Energy = a1' y1 + u1' y1 + y1' U y2 + u2' y2 + y2' U y3 + u3' y3 + an' y3
Energy = a1 y1 + u1 y1 + y1 U y2 + u2 y2 + y2 U y3 + u3 y3 + an y3
def get_energy(self, y_true, input_energy, mask):
        """Energy = a1' y1 + u1' y1 + y1' U y2 + u2' y2 + y2' U y3 + u3' y3 + an' y3
        """
        input_energy = K.sum(input_energy * y_true, 2)  # (B, T)
        chain_energy = K.sum(K.dot(y_true[:, :-1, :], self.chain_kernel) * y_true[:, 1:, :], 2)  # (B, T-1)

        if mask is not None:
            mask = K.cast(mask, K.floatx())
            chain_mask = mask[:, :-1] * mask[:, 1:]  # (B, T-1), mask[:,:-1]*mask[:,1:] makes it work with any padding
            input_energy = input_energy * mask
            chain_energy = chain_energy * chain_mask
        total_energy = K.sum(input_energy, -1) + K.sum(chain_energy, -1)  # (B, )

        return total_energy
def get_energy ( self , y_true , input_energy , mask ) : input_energy = K . sum ( input_energy * y_true , 2 ) # (B, T) chain_energy = K . sum ( K . dot ( y_true [ : , : - 1 , : ] , self . chain_kernel ) * y_true [ : , 1 : , : ] , 2 ) # (B, T-1) if mask is not None : mask = K . cast ( mask , K . floatx ( ) ) chain_mask = mask [ : , : - 1 ] * mask [ : , 1 : ] # (B, T-1), mask[:,:-1]*mask[:,1:] makes it work with any padding input_energy = input_energy * mask chain_energy = chain_energy * chain_mask total_energy = K . sum ( input_energy , - 1 ) + K . sum ( chain_energy , - 1 ) # (B, ) return total_energy