산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Equipment >> 산업용 로봇

Python에서 다층 퍼셉트론 신경망을 만드는 방법

이 문서에서는 신경망을 훈련하고 고급 분류를 수행할 수 있는 Python 프로그램을 단계별로 안내합니다.

이것은 AAC의 신경망 개발 시리즈의 12번째 항목입니다. 아래에서 시리즈가 제공하는 다른 기능을 확인하세요.

<올>
  • 신경망을 사용하여 분류를 수행하는 방법:퍼셉트론이란?
  • 간단한 퍼셉트론 신경망을 사용하여 데이터를 분류하는 방법
  • 기본 퍼셉트론 신경망 훈련 방법
  • 단순 신경망 훈련 이해
  • 신경망 훈련 이론 소개
  • 신경망의 학습률 이해
  • 다층 퍼셉트론을 사용한 고급 기계 학습
  • 시그모이드 활성화 함수:다층 퍼셉트론 신경망에서의 활성화
  • 다층 퍼셉트론 신경망 훈련 방법
  • 다층 퍼셉트론에 대한 훈련 공식 및 역전파 이해
  • Python 구현을 위한 신경망 아키텍처
  • Python에서 다층 퍼셉트론 신경망을 만드는 방법
  • 신경망을 사용한 신호 처리:신경망 설계 검증
  • 신경망용 데이터 세트 훈련:Python 신경망 훈련 및 검증 방법
  • 이 기사에서는 Perceptron 신경망에서 수행한 작업을 가져와 친숙한 언어인 Python으로 구현하는 방법을 배웁니다.

    신경망을 위한 이해하기 쉬운 Python 코드 개발

    최근에 나는 신경망에 대한 꽤 많은 온라인 리소스를 살펴보았고 의심할 여지 없이 좋은 정보가 많이 있지만 내가 찾은 소프트웨어 구현에 만족하지 못했습니다. 그것들은 항상 너무 복잡하거나 너무 조밀하거나 충분히 직관적이지 않습니다. 제가 Python 신경망을 작성할 때 저는 사람들이 시스템이 어떻게 작동하고 신경망 이론이 프로그램 명령으로 어떻게 번역되는지에 대해 배우는 데 도움이 될 수 있는 것을 만들고 싶었습니다.

    그러나 때때로 코드의 명확성과 코드의 효율성 사이에는 역의 관계가 있습니다. 이 기사에서 논의할 프로그램은 확실히 아닙니다. 빠른 성능에 최적화되어 있습니다. 최적화는 신경망 영역 내에서 심각한 문제입니다. 실제 응용 프로그램에는 엄청난 양의 교육이 필요할 수 있으며 결과적으로 철저한 최적화를 통해 처리 시간을 크게 줄일 수 있습니다. 그러나 우리가 하게 될 실험과 같은 간단한 실험의 경우 교육 시간이 그리 오래 걸리지 않으며 속도보다 단순성과 이해력을 중시하는 코딩 방식을 강조할 이유가 없습니다.

    전체 Python 프로그램은 이 기사의 끝에 이미지로 포함되어 있으며 파일("MLP_v1.py")은 다운로드로 제공됩니다. 코드는 훈련과 검증을 모두 수행합니다. 이 기사는 훈련에 초점을 맞추고 있으며 나중에 검증에 대해 논의할 것입니다. 어쨌든, 교육 부분에서 다루지 않은 유효성 검사 부분에는 많은 기능이 없습니다.

    코드를 숙고하는 동안 파트 10에서 제공한 약간 압도적이지만 매우 유익한 아키텍처와 용어를 추가한 다이어그램을 다시 볼 수 있습니다.


    함수 및 변수 준비

    NumPy 라이브러리는 네트워크 계산에 광범위하게 사용되며 Pandas 라이브러리는 Excel 파일에서 교육 데이터를 가져올 수 있는 편리한 방법을 제공합니다.

    이미 알고 있듯이 우리는 활성화를 위해 로지스틱 시그모이드 함수를 사용하고 있습니다. 활성화 후 값을 계산하기 위해서는 로지스틱 함수 자체가 필요하고 역전파를 위해서는 로지스틱 함수의 도함수가 필요합니다.

    다음으로 학습률, 입력 레이어의 차원, 은닉 레이어의 차원, 에포크 수를 선택합니다. 여러 에포크에 걸친 훈련은 훈련 데이터에서 더 많은 학습을 추출할 수 있기 때문에 실제 신경망에 중요합니다. Excel에서 훈련 데이터를 생성할 때 더 많은 훈련 샘플을 쉽게 생성할 수 있으므로 여러 Epoch를 실행할 필요가 없습니다.

    np.random.uniform() 함수는 두 개의 가중치 행렬을 -1과 +1 사이의 임의 값으로 채웁니다. (hidden-to-output 행렬은 하나의 출력 노드만 있기 때문에 실제로 배열일 뿐입니다.) np.random.seed(1) 문을 사용하면 프로그램을 실행할 때마다 임의의 값이 동일하게 됩니다. 초기 가중치 값은 훈련된 네트워크의 최종 성능에 상당한 영향을 미칠 수 있으므로 기타 변수가 성능을 향상시키거나 저하시키는 경우 이 명령의 주석을 제거하여 임의 가중치 초기화의 영향을 제거할 수 있습니다.

    마지막으로 히든 레이어에 preactivation과 postactivation 값을 위한 빈 배열을 생성합니다.

    교육 데이터 가져오기

    이것은 4부에서 사용한 것과 동일한 절차입니다. Excel에서 훈련 데이터를 가져오고 "출력" 열에서 대상 값을 분리하고 "출력" 열을 제거하고 훈련 데이터를 NumPy 행렬로 변환하고 저장합니다. training_count의 훈련 샘플 수 변수.

    피드포워드 처리

    출력 값을 생성하고 데이터가 일반적인 신경망 다이어그램에서 왼쪽에서 오른쪽으로 이동하는 계산은 시스템 작업의 "피드포워드" 부분을 구성합니다. 다음은 피드포워드 코드입니다.


    첫 번째 for 루프를 사용하면 여러 에포크를 가질 수 있습니다. 각 에포크 내에서 각 샘플에 대한 출력 값(즉, 출력 노드의 활성화 후 신호)을 계산하고 해당 샘플별 작업은 두 번째 for 루프에 의해 캡처됩니다. 세 번째 for 루프에서는 내적을 사용하여 사전 활성화 신호를 생성하고 활성화 함수를 사용하여 사후 활성화 신호를 생성하여 각 숨겨진 노드에 개별적으로 주의를 기울입니다.

    그 후, 출력 노드에 대한 사전 활성화 신호를 계산할 준비가 되었습니다(다시 내적 사용). 활성화 함수를 적용하여 사후 활성화 신호를 생성합니다. 그런 다음 출력 노드의 활성화 후 신호에서 대상을 빼서 최종 오류를 계산합니다.

    역전파

    피드포워드 계산을 수행한 후에는 방향을 바꿀 차례입니다. 프로그램의 역전파 부분에서 출력 노드에서 은닉-출력 가중치로 이동한 다음 입력-숨겨 가중치로 이동하여 네트워크를 효과적으로 훈련하는 데 사용하는 오류 정보를 가져옵니다.

    여기에 두 개의 for 루프 레이어가 있습니다. 하나는 hidden-to-output weights용이고 다른 하나는 input-to-hidden weights용입니다. 먼저 SERROR를 생성합니다. , 두 gradientHtoO를 모두 계산하는 데 필요합니다. 및 그래디언트ItoH , 그리고 학습률을 곱한 기울기를 빼서 가중치를 업데이트합니다.

    입력-숨겨진 가중치가 내에서 업데이트되는 방식에 주목하세요. 은닉-출력 루프. 숨겨진 노드 중 하나로 다시 연결되는 오류 신호로 시작한 다음 해당 오류 신호를 이 숨겨진 노드 하나에 연결된 모든 입력 노드로 확장합니다.


    하나의 숨겨진 노드와 관련된 모든 가중치(ItoH 및 HtoO 모두)가 업데이트된 후 루프백하고 다음 숨겨진 노드에서 다시 시작합니다.

    또한 ItoH 가중치는 HtoO 가중치보다 먼저 수정됩니다. 기울기를 계산할 때 현재 HtoO 가중치를 사용합니다.ItoH , 그래서 우리는 이 계산이 수행되기 전에 HtoO 가중치를 변경하고 싶지 않습니다.

    결론

    이 비교적 짧은 Python 프로그램에 얼마나 많은 이론이 들어왔는지 생각하는 것은 흥미롭습니다. 이 코드가 소프트웨어에서 다층 퍼셉트론 신경망을 구현하는 방법을 실제로 이해하는 데 도움이 되기를 바랍니다.

    내 전체 코드는 아래에서 찾을 수 있습니다.

    코드 다운로드


    산업용 로봇

    1. AWS를 사용하여 CloudFormation 템플릿을 만드는 방법
    2. 우수한 클라우드 센터를 만드는 방법은 무엇입니까?
    3. 마찰 없는 UX를 만드는 방법
    4. VHDL에서 문자열 목록을 만드는 방법
    5. 자가 점검 테스트벤치를 만드는 방법
    6. VHDL에서 타이머를 만드는 방법
    7. VHDL에서 클럭 프로세스를 만드는 방법
    8. 신경망 교육의 국소 최소값 이해
    9. Java에서 객체 배열을 만드는 방법
    10. 파이썬 - 네트워크 프로그래밍