def __init__(self, Wx, Wh, b, stateful=False):
        self.params = [Wx, Wh, b]
        self.grads = [np.zeros_like(Wx), np.zeros_like(Wh), np.zeros_like(b)]
        self.layers = None

        self.h, self.dh = None, None
        self.stateful = stateful
    def __init__(self, Wx, Wh, b):
        '''

        Parameters
        ----------
        Wx: 入力`x`用の重みパラーメタ(4つ分の重みをまとめる)
        Wh: 隠れ状態`h`用の重みパラメータ(4つ分の重みをまとめる)
        b: バイアス(4つ分のバイアスをまとめる)
        '''
        self.params = [Wx, Wh, b]
        self.grads = [np.zeros_like(Wx), np.zeros_like(Wh), np.zeros_like(b)]
        self.cache = None
    def backward(self, dh):
        dhs = np.zeros_like(self.hs)
        dhs[:, -1, :] = dh

        dout = self.lstm.backward(dhs)
        self.embed.backward(dout)
        return None
    def update(self, params, grads):
        if self.m is None:
            self.m, self.v = [], []
            for param in params:
                self.m.append(np.zeros_like(param))
                self.v.append(np.zeros_like(param))

        self.iter += 1

        for i in range(len(params)):
            self.m[i] = self.beta1 * self.m[i] + (1 - self.beta1) * grads[i]
            self.v[i] = self.beta2 * self.v[i] + (1 - self.beta2) * (grads[i]**
                                                                     2)

            m_i_hat = self.m[i] / (1 - self.beta1**self.iter)
            v_i_hat = self.v[i] / (1 - self.beta2**self.iter)

            params[i] -= self.lr * m_i_hat / (np.sqrt(v_i_hat) + 1e-8)
def ppmi(C, verbose=False, eps=1e-8):
    '''PPMI(正の相互情報量)の作成

    :param C: 共起行列
    :param verbose: 進行状況を出力するかどうか
    :return:
    '''
    M = np.zeros_like(C, dtype=np.float32)
    N = np.sum(C)
    S = np.sum(C, axis=0)
    total = C.shape[0] * C.shape[1]
    cnt = 0

    for i in range(C.shape[0]):
        for j in range(C.shape[1]):
            pmi = np.log2(C[i, j] * N / (S[i] * S[j]) + eps)
            M[i, j] = max(0, pmi)

            if verbose:
                cnt += 1
                if cnt % (total // 100) == 0:
                    print('%.1f%% done' % (100 * cnt / total))
    return M
 def __init__(self, Wx, Wh, b):
     self.params = [Wx, Wh, b]
     self.grads = [np.zeros_like(Wx), np.zeros_like(Wh), np.zeros_like(b)]
     self.cache = None
 def __init__(self, W, b):
     self.params = [W, b]
     self.grads = [np.zeros_like(W), np.zeros_like(b)]
     self.x = None
 def __init__(self, W):
     self.params = [W]
     self.grads = [np.zeros_like(W)]
     self.layers = None
     self.W = W
Example #9
0
 def __init__(self, W):
     self.params = [W]
     self.grads = [np.zeros_like(W)]
     self.x = None