def numerical_gradient(self, X, T):
        """기울기를 구한다(수치 미분).
        
        Parameters
        ----------
        x : 입력 데이터
        t : 정답 레이블
        
        Returns
        -------
        각 층의 기울기를 담은 사전(dictionary) 변수
            grads['W1']、grads['W2']、... 각 층의 가중치
            grads['b1']、grads['b2']、... 각 층의 편향
        """
        loss_W = lambda W: self.loss(X, T, train_flg=True)

        grads = {}
        for idx in range(1, self.hidden_layer_num+2):
            grads['W' + str(idx)] = numerical_gradient(loss_W, self.params['W' + str(idx)])
            grads['b' + str(idx)] = numerical_gradient(loss_W, self.params['b' + str(idx)])
            
            if self.use_batchnorm and idx != self.hidden_layer_num+1:
                grads['gamma' + str(idx)] = numerical_gradient(loss_W, self.params['gamma' + str(idx)])
                grads['beta' + str(idx)] = numerical_gradient(loss_W, self.params['beta' + str(idx)])

        return grads
Beispiel #2
0
    def numerical_gradient(self, x, t):  # 가중치 매개변수의 기울기를 구함
        loss_W = lambda W: self.loss(x, t)

        grads = {}  # 기울기
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
Beispiel #3
0
    def numerical_gradient(self, x, t):
        loss_w = lambda w: self.loss(x, t)

        grads = {}
        for idx in (1, 2, 3):
            grads['W' + str(idx)] = numerical_gradient(
                loss_w, self.params['W' + str(idx)])
            grads['b' + str(idx)] = numerical_gradient(
                loss_w, self.params['b' + str(idx)])
        return grads
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(x, t)

        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
Beispiel #5
0
def numerical_gradient(self, x, t):
    loss_w = lambda q: self.loss(x, t)

    grads = {}
    grads['w1'] = numerical_gradient(loss_w, self.params['w1'])
    grads['b1'] = numerical_gradient(loss_w, self.params['b1'])
    grads['w2'] = numerical_gradient(loss_w, self.params['w2'])
    grads['b2'] = numerical_gradient(loss_w, self.params['b2'])

    return grads
Beispiel #6
0
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(x, t)
        # 保存梯度的字典型变量(numerical_gradient()方法的返回值)。
        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])  # grads['W1']是第1 层权重的梯度
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])  # grads['b1']是第1 层偏置的梯度。
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
 def numerical_gradient(self, x, t):
     loss_W = lambda W: self.loss(x, t)
     
     grads = {}
     grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
     grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
     grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
     grads['b2'] = numerical_gradient(loss_W, self.params['b2'])
     
     return grads
Beispiel #8
0
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(x, t)

        grads = {
            'W1': numerical_gradient(loss_W, self.params['W1']),
            'b1': numerical_gradient(loss_W, self.params['b1']),
            'W2': numerical_gradient(loss_W, self.params['W2']),
            'b2': numerical_gradient(loss_W, self.params['b2'])
        }
        return grads
    def numerical_gradient(self, x, t):

        loss_W = lambda W: self.loss(x, t)

        grads = {}
        for idx in range(1, self.hidden_layer_num+2):
            grads['W' + str(idx)] = numerical_gradient(loss_W, self.params['W' + str(idx)])
            grads['b' + str(idx)] = numerical_gradient(loss_W, self.params['b' + str(idx)])

        return grads
Beispiel #10
0
def numerical_gradient(self,x,t):
    loss_W = lambda W: self.loss(x, t)
        
    grads = {}
    grads["W1"] = numerical_gradient(loss_W,self.params["W1"])
    grads["b1"] = numerical_gradient(loss_W,self.params["b1"])
    grads["W2"] = numerical_gradient(loss_W,self.params["W2"])
    grads["b2"] = numerical_gradient(loss_W,self.params["b2"])
        
    return grads
Beispiel #11
0
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(x, t)

        grads = {}

        # 重みとバイアスの各値を勾配降下で学習させてそのパラメーターを更新する
        # 損失関数を微分にかける
        grads["W1"] = numerical_gradient(loss_W, self.params["W1"])
        grads["b1"] = numerical_gradient(loss_W, self.params["b1"])
        grads["W2"] = numerical_gradient(loss_W, self.params["W2"])
        grads["b2"] = numerical_gradient(loss_W, self.params["b2"])
Beispiel #12
0
    def numerical_gradient(self, x, t):
        # ラムダ式
        def loss_W(W): return self.loss(x, t)

        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(x, t)  #무슨 코드인지 확인 필요

        grads = {}
        grads['W1'] = numerical_gradient(loss_W,
                                         self.params['W1'])  # 기울기 구해주는 함수
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
    def numerical_gradient(self, x,
                           t):  # 重みパラメータに対する勾配を求める method を定義 cf.p.104
        loss_W = lambda W: self.loss(x, t)  # loss_W を定義 cf.p.112

        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(x, t)

        grad_W = [np.array([])]
        for i in range(1, len(self.W)):
            grad_W.append(numerical_gradient(loss_W, self.W[i]))
        grad_b = [np.array([])]
        for i in range(1, len(self.b)):
            grad_b.append(numerical_gradient(loss_W, self.b[i]))

        return grad_W, grad_b
Beispiel #16
0
    def numerical_gradient(self, x, t):
        def loss_W(W):
            return self.loss(x, t)

        grads = {}
        for i in range(1, len(self.layer_size)):
            grads['W{}'.format(i)] = numerical_gradient(
                loss_W, self.params['W{}'.format(i)])
            grads['b{}'.format(i)] = numerical_gradient(
                loss_W, self.params['b{}'.format(i)])

        return grads
Beispiel #17
0
 def numerical_gradient(self, x, t):
     loss_W = lambda W: self.loss(x, t)
     grads = {}
     print("start numerical_gradient W1")
     grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
     print("start numerical_gradient b1")
     grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
     print("start numerical_gradient W2")
     grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
     print("start numerical_gradient b2")
     grads['b2'] = numerical_gradient(loss_W, self.params['b2'])
     return grads
Beispiel #18
0
    def numerical_gradient(self, x, t):
        def loss_W(_): return self.loss(x, t)

        # すべてのパラメータを損失関数に対して調整しようとする
        # ある位置での損失関数の傾き
        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
Beispiel #19
0
    def numerical_gradient(self,x,t):
        loss_W=lambda W: self.loss(x,t)
        #重みパラメータに対する勾配
        #lamba式
        grads={}
        #dL/dW:
        grads['W1']=numerical_gradient(loss_W,self.params['W1'])
        grads['b1']=numerical_gradient(loss_W,self.params['b1'])
        grads['W2']=numerical_gradient(loss_W,self.params['W2'])
        grads['b2']=numerical_gradient(loss_W,self.params['b2'])

        return grads
Beispiel #20
0
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(
            x, t
        )  # loss 내의 predict를 통해서 예상치를 구함. 예상치와 실제 값을 통해서 cross-entropy 계산.

        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
Beispiel #21
0
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(x, t)

        # 학습 수행 시, 편미분 결과에 대해 저장하는 dict 자료형 선언
        grads = {}
        # 각 변수별로 기울기를 구하고 저장함 (key:value pair)
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
    def numerical_gradient(self, x, t):
        u"""
        重みパラメータに対する勾配を求める
        """
        loss_W = lambda W: self.loss(x, t)

        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(x, t)

        grads = {}

        # 클래스 내 자가 호출 시 self 를 해야하기 때문에 역으로 보면 같은 이름이라도 self 로 호출하지 않는한 자신의 함수가 아닌걸로
        # 판단하기 때문에 numerical_gradient 함수는 외부 함수로 인식 한다.
        grads['W1'] = numerical_gradient(loss_W, self.param['W1'])
        grads['B1'] = numerical_gradient(loss_W, self.param['B1'])
        grads['W2'] = numerical_gradient(loss_W, self.param['W2'])
        grads['B2'] = numerical_gradient(loss_W, self.param['B2'])

        return grads
    def numerical_gradient(self, X, T):
        loss_W = lambda W: self.loss(X, T, train_flg=True)

        grads = {}
        for idx in range(1, self.hidden_layer_num+2):
            grads['W' + str(idx)] = numerical_gradient(loss_W, self.params['W' + str(idx)])
            grads['b' + str(idx)] = numerical_gradient(loss_W, self.params['b' + str(idx)])

            if self.use_batchnorm and idx != self.hidden_layer_num+1:
                grads['gamma' + str(idx)] = numerical_gradient(loss_W, self.params['gamma' + str(idx)])
                grads['beta' + str(idx)] = numerical_gradient(loss_W, self.params['beta' + str(idx)])

        return grads
Beispiel #25
0
    def numerical_gradient(self, x, t):

        # 현재 입력 관점에서 손실함수를 계산함 (순전파 수행)
        loss_W = lambda W: self.loss(x, t)

        # 경사 하강법을 이용하여 weight, bias를 갱신함
        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
Beispiel #26
0
    def numerical_gradient(self, x, t):
        """
        :param x:输入数据
        :param t:监督数据
        :return:
        """
        loss_W = lambda W: self.loss(x, t)

        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])
        return grads
    def numerical_gradient(self, x, t):  # 가중치, 편향의 기울기 계산
        loss_W = lambda W: self.loss(x, t)

        grads = {}  # 기울기 값 저장
        grads['W1'] = numerical_gradient(loss_W,
                                         self.params['W1'])  # 1층의 가중치의 기울기
        grads['b1'] = numerical_gradient(loss_W,
                                         self.params['b1'])  # 1층의 편향의 기울기
        grads['W2'] = numerical_gradient(loss_W,
                                         self.params['W2'])  # 2층의 가중치의 기울기
        grads['b2'] = numerical_gradient(loss_W,
                                         self.params['b2'])  # 2층의 편향의 기울기

        return grads
Beispiel #28
0
    def numerical_gradient(self, x, t):  # 수치 미분 함수, 가중치 매개변수의 기울기를 구한다.
        loss_W = lambda W: self.loss(x, t)

        grads = {}  # 기울기를 저장하는 딕셔너리
        grads['W1'] = numerical_gradient(loss_W,
                                         self.params['W1'])  # 1번째 층의 가중치의 기울기
        grads['b1'] = numerical_gradient(loss_W,
                                         self.params['b1'])  # 1번째 층의 편향의 기울기
        grads['W2'] = numerical_gradient(loss_W,
                                         self.params['W2'])  # 2번째 층의 가중치의 기울기
        grads['b2'] = numerical_gradient(loss_W,
                                         self.params['b2'])  # 2번째 층의 편향의 기울기

        return grads  # params 변수에 대응하는 각 매개변수의 기울기가 저장됨.
Beispiel #29
0
    def numerical_gradient(self, x, t):
        """
        数値微分による重みパラメータに対する勾配算出
        :param x: 入力データ
        :param t: 教師データ
        :return:
        """
        loss_W = lambda W: self.loss(x, t)

        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])
        return grads
Beispiel #30
0
    def numerical_gradient(self, x, t):
        """

        :param x: input number
        :param t: label
        :return: gradient
        """
        loss_W = lambda W: self.loss(x, t)
        # print(t.shape)
        grads = {}
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])
        return grads
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(x, t)

        # 각 매개변수의 손실 함수에 대한 기울기 계산
        grads = {}  # 기울기 보관하는 딕셔너리 변수
        # 1번째 층의 가중치의 기울기
        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
        # 1번째 층의 편향 기울기
        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
        # 2번째 층의 가중치의 기울기
        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
        # 2번째 층의 편향 기울기
        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])

        return grads
Beispiel #32
0
    def numerical_gradient(self, x, t):
        loss_W = lambda W: self.loss(x, t)

        # 勾配を保持
        grads = {}
        grads['W1'] = numerical_gradient(loss_W,
                                         self.params['W1'])  # 1層目の重みの勾配
        grads['b1'] = numerical_gradient(loss_W,
                                         self.params['b1'])  # 1層目のバイアスの勾配
        grads['W2'] = numerical_gradient(loss_W,
                                         self.params['W2'])  # 2層目の重みの勾配
        grads['b2'] = numerical_gradient(loss_W,
                                         self.params['b2'])  # 2層目のバイアスの勾配

        return grads
    def numerical_gradient(self, x, t):
        """勾配を求める(数値微分)

        Parameters
        ----------
        x : 入力データ
        t : 教師ラベル

        Returns
        -------
        各層の勾配を持ったディクショナリ変数
            grads['W1']、grads['W2']、...は各層の重み
            grads['b1']、grads['b2']、...は各層のバイアス
        """
        loss_W = lambda W: self.loss(x, t)

        grads = {}
        for idx in range(1, self.hidden_layer_num+2):
            grads['W' + str(idx)] = numerical_gradient(loss_W, self.params['W' + str(idx)])
            grads['b' + str(idx)] = numerical_gradient(loss_W, self.params['b' + str(idx)])

        return grads
    def numerical_gradient(self, x, t):
        """기울기를 구한다(수치미분).

        Parameters
        ----------
        x : 입력 데이터
        t : 정답 레이블

        Returns
        -------
        각 층의 기울기를 담은 사전(dictionary) 변수
            grads['W1']、grads['W2']、... 각 층의 가중치
            grads['b1']、grads['b2']、... 각 층의 편향
        """
        loss_w = lambda w: self.loss(x, t)

        grads = {}
        for idx in (1, 2, 3):
            grads['W' + str(idx)] = numerical_gradient(loss_w, self.params['W' + str(idx)])
            grads['b' + str(idx)] = numerical_gradient(loss_w, self.params['b' + str(idx)])

        return grads
    def numerical_gradient(self, x, t):
        """勾配を求める(数値微分)

        Parameters
        ----------
        x : 入力データ
        t : 教師ラベル

        Returns
        -------
        各層の勾配を持ったディクショナリ変数
            grads['W1']、grads['W2']、...は各層の重み
            grads['b1']、grads['b2']、...は各層のバイアス
        """
        loss_w = lambda w: self.loss(x, t)

        grads = {}
        for idx in (1, 2, 3):
            grads['W' + str(idx)] = numerical_gradient(loss_w, self.params['W' + str(idx)])
            grads['b' + str(idx)] = numerical_gradient(loss_w, self.params['b' + str(idx)])

        return grads
Beispiel #36
0
    def numerical_gradient(self, x, t):
        """기울기를 구한다(수치 미분).
        
        Parameters
        ----------
        x : 입력 데이터
        t : 정답 레이블
        
        Returns
        -------
        각 층의 기울기를 담은 딕셔너리(dictionary) 변수
            grads['W1']、grads['W2']、... 각 층의 가중치
            grads['b1']、grads['b2']、... 각 층의 편향
        """
        loss_W = lambda W: self.loss(x, t)

        grads = {}
        for idx in range(1, self.hidden_layer_num+2):
            grads['W' + str(idx)] = numerical_gradient(loss_W, self.params['W' + str(idx)])
            grads['b' + str(idx)] = numerical_gradient(loss_W, self.params['b' + str(idx)])

        return grads
Beispiel #37
0
	def loss(self, x, t):
		z = self.predict(x)
		y = softmax(z)
		loss = cross_entropy_error(y, t)

		return loss

net = simpleNet()
print(net.W)

x = np.array([0.6, 0.9])
p = net.predict(x)
print(p)

result = np.argmax(p) # 최댓값의 인덱스
print(result)

t = np.array([0, 0, 1]) #정답 레이블
result = net.loss(x, t)
print(result)

# def f(W):
# 	return net.loss(x, t)

f = lambda w: net.loss(x, t)

dW = numerical_gradient(f, net.W)
print(dW)