> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 신경망 모델을 만드는 내용을 간략하게 이해해 보겠습니다.

Python에서 신경망 모델을 만드는 내용을 간략하게 이해해 보겠습니다.

不言
풀어 주다: 2018-10-08 17:18:12
앞으로
3087명이 탐색했습니다.

이 기사는 Python에서 신경망 모델을 만드는 방법에 대한 간략한 이해를 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.

요약: 신경망이 어떻게 작동하는지 궁금하신가요? 신경망의 작동 방식을 이해하는 가장 좋은 방법은 간단한 신경망을 직접 만들어 보는 것입니다.

ANN(인공 신경망)이라고도 알려진 신경망(NN)은 기계 학습 분야의 학습 알고리즘의 하위 집합으로, 생물학적 신경망의 개념을 느슨하게 차용한 것입니다. 현재 신경망은 컴퓨터 비전, 자연어 처리 등의 분야에서 널리 사용되고 있습니다. 독일의 수석 기계 학습 전문가인 Andrey Bulezyuk은 "신경망은 사람의 개입 없이 다양한 분야와 산업에서 복잡한 추상화를 효과적으로 시뮬레이션할 수 있기 때문에 기계 학습에 혁명을 일으키고 있습니다."라고 말했습니다.
일반적으로 인공 신경망은 기본적으로 다음 구성 요소를 포함합니다. :

  • 데이터를 수신하고 데이터를 전송하는 입력 레이어

  • 숨겨진 레이어;

  • 레이어와 레이어 사이의 가중치는 일반적으로 경사 분산이 발생하기 쉽기 때문에 첫 번째 선택입니다.

  • 또한 인공 신경망에는 피드포워드 신경망, 컨볼루션 신경망, 순환 신경망 등 여러 가지 유형의 신경망이 있습니다. 이 기사에서는 간단한 피드포워드 또는 지각 신경망을 예로 들어 설명합니다. 이러한 유형의 인공 신경망은 데이터를 앞에서 뒤로 직접 전송하는데, 이를 순방향 전파 프로세스라고 합니다.
  • 피드포워드 뉴런을 훈련하려면 일반적으로 네트워크에 해당 입력 및 출력 세트를 제공해야 하는 역전파 알고리즘이 필요합니다. 입력 데이터가 뉴런으로 전송되면 그에 따라 처리되고 결과 출력이 다음 레이어로 전송됩니다.

    다음 그림은 신경망 구조를 간단히 보여줍니다.

또한 신경망의 작동 방식을 이해하는 가장 좋은 방법은 도구 상자를 사용하지 않고 처음부터 신경망을 구축하는 방법을 배우는 것입니다. 이 기사에서는 Python을 사용하여 간단한 신경망을 만드는 방법을 보여줍니다.

문제

아래 표는 우리가 해결할 문제를 보여줍니다.

우리는 새로운 데이터 세트가 주어졌을 때 올바른 출력 값을 예측할 수 있도록 신경망을 훈련할 것입니다.

표에서 볼 수 있듯이 출력 값은 항상 입력 섹션의 첫 번째 값과 같습니다. 따라서 새로운 상황의 출력(?) 값은 1이 될 것으로 예상할 수 있다. Python에서 신경망 모델을 만드는 내용을 간략하게 이해해 보겠습니다.몇 가지 Python 코드를 사용하여 동일한 결과를 얻을 수 있는지 살펴보겠습니다.

신경망 클래스 만들기|NeuralNetwork 클래스

우리는 Python에서 NeuralNetwork 클래스를 만들어 뉴런을 훈련시켜 정확한 예측을 제공할 것입니다. 이 클래스에는 다른 도우미 함수도 포함되어 있습니다. 이 간단한 신경망 예제를 생성하기 위해 신경망 라이브러리를 사용하지 않고 계산을 돕기 위해 기본 Numpy 라이브러리를 가져올 것입니다.

Numpy 라이브러리는 데이터 처리를 위한 기본 라이브러리입니다.

EXP - 자연 지수를 생성하는 데 사용됩니다.

배열 - 행렬을 생성하는 데 사용됩니다. - 행렬 곱셈에 사용됩니다.

random - 난수를 생성하는 데 사용됩니다.

  • Sigmoid 함수 적용

  • "S" 모양의 곡선을 그리는 Sigmoid 함수를 활성화 함수로 사용합니다. 이 글에서 만든 신경망의 모습입니다.
  • 이 함수는 0과 1 사이의 값을 매핑할 수 있으며 입력의 가중 합계를 정규화하는 데 도움이 됩니다.
  • 이후에는 가중치에 대한 기본 조정을 계산하는 데 도움이 되는 시그모이드 함수의 파생 함수를 만듭니다.

    시그모이드 함수의 출력을 사용하여 도함수를 생성할 수 있습니다. 예를 들어, 출력 변수가 "x"인 경우 해당 도함수는 x *(1-x)가 됩니다.
모델 교육

모델 교육은 정확한 예측을 위해 신경망을 가르치는 단계를 의미합니다. 각 입력에는 양수 또는 음수 가중치가 있습니다. 즉, 양수 가중치가 크거나 음수 가중치가 큰 입력이 결과 출력에 더 큰 영향을 미친다는 의미입니다.

모델이 처음 훈련될 때 각 가중치는 임의의 숫자로 초기화됩니다.

다음은 이 기사에서 구성한 신경망 예제 문제의 훈련 과정입니다. Python에서 신경망 모델을 만드는 내용을 간략하게 이해해 보겠습니다.

1. 훈련 데이터 세트에서 입력을 얻고, 가중치에 따라 일부 조정을 하고, 다음을 계산하여 레이어별로 전송합니다. 신경망의 출력 ;

  • 2. 역전파의 오류율을 계산합니다. 이 경우에는 뉴런의 예측 출력과 훈련 데이터 세트의 예상 출력 간의 오류입니다.

  • 3 얻은 오류 범위를 기반으로 오류 가중 파생 공식을 사용하여 약간의 가중치를 조정합니다.

  • 4. 이 프로세스를 15,000회 반복하고 각 반복 중에 전체 훈련 세트가 동시에 처리됩니다.

  • 여기에서는 ".T" 함수를 사용하여 행렬을 편향합니다. 따라서 숫자는 다음과 같은 방식으로 저장됩니다.

    Python에서 신경망 모델을 만드는 내용을 간략하게 이해해 보겠습니다.

    궁극적으로 뉴런의 가중치는 제공된 훈련 데이터에 맞게 최적화됩니다. 따라서 신경망의 출력이 예상 출력과 일치하면 훈련이 완료되어 정확한 예측을 할 수 있다는 의미입니다.

    Encapsulation

    마지막으로 NeuralNetwork 클래스를 초기화하고 전체 프로그램을 실행한 후 Python 프로젝트에서 신경망을 생성하는 방법에 대한 전체 코드는 다음과 같습니다.

    import numpy as np
    
    class NeuralNetwork():
        
        def __init__(self):
            # 设置随机数种子
            np.random.seed(1)
            
            # 将权重转化为一个3x1的矩阵,其值分布为-1~1,并且均值为0
            self.synaptic_weights = 2 * np.random.random((3, 1)) - 1
    
        def sigmoid(self, x):
            # 应用sigmoid激活函数
            return 1 / (1 + np.exp(-x))
    
        def sigmoid_derivative(self, x):
            #计算Sigmoid函数的偏导数
            return x * (1 - x)
    
        def train(self, training_inputs, training_outputs, training_iterations):
            
            # 训练模型
            for iteration in range(training_iterations):
                # 得到输出
                output = self.think(training_inputs)
    
                # 计算误差
                error = training_outputs - output
                
                # 微调权重
                adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))
    
                self.synaptic_weights += adjustments
    
        def think(self, inputs):
            # 输入通过网络得到输出   
            # 转化为浮点型数据类型
            
            inputs = inputs.astype(float)
            output = self.sigmoid(np.dot(inputs, self.synaptic_weights))
            return output
    
    
    if __name__ == "__main__":
    
        # 初始化神经类
        neural_network = NeuralNetwork()
    
        print("Beginning Randomly Generated Weights: ")
        print(neural_network.synaptic_weights)
    
        #训练数据
        training_inputs = np.array([[0,0,1],
                                    [1,1,1],
                                    [1,0,1],
                                    [0,1,1]])
    
        training_outputs = np.array([[0,1,1,0]]).T
    
        # 开始训练
        neural_network.train(training_inputs, training_outputs, 15000)
    
        print("Ending Weights After Training: ")
        print(neural_network.synaptic_weights)
    
        user_input_one = str(input("User Input One: "))
        user_input_two = str(input("User Input Two: "))
        user_input_three = str(input("User Input Three: "))
        
        print("Considering New Situation: ", user_input_one, user_input_two, user_input_three)
        print("New Output data: ")
        print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))
        print("Wow, we did it!")
    로그인 후 복사

    코드 실행 후 생성된 출력은 다음과 같습니다.

    Python에서 신경망 모델을 만드는 내용을 간략하게 이해해 보겠습니다.

    위 내용은 우리가 가지고 있는 간단한 신경망을 만들어 보도록 하겠습니다. 먼저 신경망은 자신에게 임의의 가중치를 할당하기 시작한 다음 훈련 예제를 사용하여 스스로 훈련합니다.

    따라서 새로운 샘플 입력 [1,0,0]이 발생하면 출력 값은 0.9999584입니다. 예상 정답은 1이다. 시그모이드 함수가 비선형 함수라는 점을 고려하면 이 둘은 매우 가깝다고 볼 수 있다.

    또한 이 기사에서는 간단한 작업을 수행하기 위해 신경망의 한 계층만 사용합니다. 수천 개의 인공 신경망을 하나로 합치면 어떻게 될까요? 인간의 사고방식을 100% 모방할 수 있나요? 대답은 '예'입니다. 하지만 현재는 구현하기가 매우 어렵습니다. 이에 관심 있는 독자들은 딥러닝 관련 자료를 읽어보시면 됩니다.

    위 내용은 Python에서 신경망 모델을 만드는 내용을 간략하게 이해해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:segmentfault.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿