이 기사는 Python에서 신경망 모델을 만드는 방법에 대한 간략한 이해를 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.
요약: 신경망이 어떻게 작동하는지 궁금하신가요? 신경망의 작동 방식을 이해하는 가장 좋은 방법은 간단한 신경망을 직접 만들어 보는 것입니다.
ANN(인공 신경망)이라고도 알려진 신경망(NN)은 기계 학습 분야의 학습 알고리즘의 하위 집합으로, 생물학적 신경망의 개념을 느슨하게 차용한 것입니다. 현재 신경망은 컴퓨터 비전, 자연어 처리 등의 분야에서 널리 사용되고 있습니다. 독일의 수석 기계 학습 전문가인 Andrey Bulezyuk은 "신경망은 사람의 개입 없이 다양한 분야와 산업에서 복잡한 추상화를 효과적으로 시뮬레이션할 수 있기 때문에 기계 학습에 혁명을 일으키고 있습니다."라고 말했습니다.
일반적으로 인공 신경망은 기본적으로 다음 구성 요소를 포함합니다. :
데이터를 수신하고 데이터를 전송하는 입력 레이어
숨겨진 레이어;
레이어와 레이어 사이의 가중치는 일반적으로 경사 분산이 발생하기 쉽기 때문에 첫 번째 선택입니다.
피드포워드 뉴런을 훈련하려면 일반적으로 네트워크에 해당 입력 및 출력 세트를 제공해야 하는 역전파 알고리즘이 필요합니다. 입력 데이터가 뉴런으로 전송되면 그에 따라 처리되고 결과 출력이 다음 레이어로 전송됩니다.
다음 그림은 신경망 구조를 간단히 보여줍니다.또한 신경망의 작동 방식을 이해하는 가장 좋은 방법은 도구 상자를 사용하지 않고 처음부터 신경망을 구축하는 방법을 배우는 것입니다. 이 기사에서는 Python을 사용하여 간단한 신경망을 만드는 방법을 보여줍니다.
문제
아래 표는 우리가 해결할 문제를 보여줍니다.
표에서 볼 수 있듯이 출력 값은 항상 입력 섹션의 첫 번째 값과 같습니다. 따라서 새로운 상황의 출력(?) 값은 1이 될 것으로 예상할 수 있다. 몇 가지 Python 코드를 사용하여 동일한 결과를 얻을 수 있는지 살펴보겠습니다.
신경망 클래스 만들기|NeuralNetwork 클래스
Numpy 라이브러리는 데이터 처리를 위한 기본 라이브러리입니다.
EXP - 자연 지수를 생성하는 데 사용됩니다.
random - 난수를 생성하는 데 사용됩니다.
Sigmoid 함수 적용
다음은 이 기사에서 구성한 신경망 예제 문제의 훈련 과정입니다.
1. 훈련 데이터 세트에서 입력을 얻고, 가중치에 따라 일부 조정을 하고, 다음을 계산하여 레이어별로 전송합니다. 신경망의 출력 ;2. 역전파의 오류율을 계산합니다. 이 경우에는 뉴런의 예측 출력과 훈련 데이터 세트의 예상 출력 간의 오류입니다.
3 얻은 오류 범위를 기반으로 오류 가중 파생 공식을 사용하여 약간의 가중치를 조정합니다.
4. 이 프로세스를 15,000회 반복하고 각 반복 중에 전체 훈련 세트가 동시에 처리됩니다.
여기에서는 ".T" 함수를 사용하여 행렬을 편향합니다. 따라서 숫자는 다음과 같은 방식으로 저장됩니다.
궁극적으로 뉴런의 가중치는 제공된 훈련 데이터에 맞게 최적화됩니다. 따라서 신경망의 출력이 예상 출력과 일치하면 훈련이 완료되어 정확한 예측을 할 수 있다는 의미입니다.
마지막으로 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!")
코드 실행 후 생성된 출력은 다음과 같습니다.
위 내용은 우리가 가지고 있는 간단한 신경망을 만들어 보도록 하겠습니다. 먼저 신경망은 자신에게 임의의 가중치를 할당하기 시작한 다음 훈련 예제를 사용하여 스스로 훈련합니다.
따라서 새로운 샘플 입력 [1,0,0]이 발생하면 출력 값은 0.9999584입니다. 예상 정답은 1이다. 시그모이드 함수가 비선형 함수라는 점을 고려하면 이 둘은 매우 가깝다고 볼 수 있다.
또한 이 기사에서는 간단한 작업을 수행하기 위해 신경망의 한 계층만 사용합니다. 수천 개의 인공 신경망을 하나로 합치면 어떻게 될까요? 인간의 사고방식을 100% 모방할 수 있나요? 대답은 '예'입니다. 하지만 현재는 구현하기가 매우 어렵습니다. 이에 관심 있는 독자들은 딥러닝 관련 자료를 읽어보시면 됩니다.
위 내용은 Python에서 신경망 모델을 만드는 내용을 간략하게 이해해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!