Пример #1
0
def forward(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    z1 = sigmoid(x.dot(W1) + b1)  # 첫번째 은닉층 전파(propagation)
    z2 = sigmoid(z1.dot(W2) + b2)  # 두번째 은닉층 전파(propagation)
    y = softmax(z2.dot(W3) + b3)  # 출력층 전파(propagation)

    return y
Пример #2
0
def predict(network, X_test):
    ''' 가중치 행렬들(W1, W2, W3, b1, b2, b3)을 생성
        '''

    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    a1 = X_test.dot(W1) + b1
    z1 = sigmoid(a1)
    z2 = sigmoid(z1.dot(W2) + b2)
    y = z2.dot(W3) + b3
    y = softmax(y)

    y_pred = np.argmax(y, axis=1)

    return y_pred
Пример #3
0
def predict(network, X_test):
    ''' 가중치 행렬들(W1, W2, W3, b1, b2, b3)을 생성
        '''

    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    a1 = X_test.dot(W1) + b1
    z1 = sigmoid(a1)
    z2 = sigmoid(z1.dot(W2) + b2)
    y = z2.dot(W3) + b3
    y = softmax(y)

    # print('y after softmax:', y)
    y = step_function2(y)
    # print('y after step:', y[0])

    return y
Пример #4
0
def forward(network, x):
    '''
    순방향 전파(forward propagation). 입력 -> 은닉층 -> 출력.

    :param network: 신경망에서 사용되는 가중치/bias 행렬들을 저장한 dict
    :param x: 입력 값을 가지고 있는 (1차원) 리스트. [x1, x2]
    :return: 2개의 은닉층과 출력층을 거친 후 계산된 출력 값. [y1, y2]
    '''

    # 가중치 행렬:
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    # bias 행렬:
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    # 은닉층에서 활성화 함수: sigmoid 함수
    a1 = x.dot(W1) + b1
    z1 = sigmoid(a1)  # 첫번째 은닉층 전파
    z2 = sigmoid(z1.dot(W2) + b2)  # 두번째 은닉층 전파
    # 출력층 : z2 2 W3 + b3 값을 그대로 출력
    y = z2.dot(W3) + b3
    # return identity_function(y)
    return softmax(y)  # 출력층의 활성화 함수로 softmax 함수를 적용
Пример #5
0
def forward(network, x):
    """
    순방향 전파(forward propagation).
    파라미터 x: 이미지 한 개의 정보를 가지고 있는 배열. (784,)
    """
    # 가중치 행렬(Weight Matrices)
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    # bias matrices
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    # 첫번째 은닉층
    a1 = x.dot(W1) + b1
    z1 = sigmoid(a1)

    # 두번째 은닉층
    a2 = z1.dot(W2) + b2
    z2 = sigmoid(a2)

    # 출력층
    a3 = z2.dot(W3) + b3
    y = softmax(a3)

    return y
Пример #6
0
from ch03.e01_Perceptron import sigmoid


class Sigmoid:
    def __init__(self):
        self.y = None

    def forward(self, x):
        self.y = 1 / (1 + np.exp(-x))
        return self.y

    def backward(self, dout):
        return dout * (self.y * (1 - self.y))


if __name__ == '__main__':
    # Sigmoid 뉴런을 생성
    sigmoid_gate = Sigmoid()
    # x = 1 일때 sigmoid 함수의 리턴값(forward)
    y = sigmoid_gate.forward(x=0.)
    print('y =', y)  # x = 0 일때 sigmoid(0) = .5

    # x = 0 에서의 sigmoid 의 gradient(전선의 기울기)
    dx = sigmoid_gate.backward(dout=1)
    print('dx =', dx)

    # 아주 작은 h 에 대해서 [f(x + h) - f(x)] / h 를 계산
    h = 1e-7
    dx2 = (sigmoid(0. + h) - sigmoid(0.)) / h
    print('dx2 =', dx2)