Javascript와 Dannjs를 사용하여 신경 네트워크를 훈련시켜 계수를 계산한다

계수는 우리 인류에게는 매우 직관적이지만 신경 네트워크에는 그렇지 않다.이것이 바로 당신이 이곳에서 Dannjs로 당신의 첫 번째 신경 네트워크를 구축하는 것을 배우는 이유입니다.일부 기계 학습의 개념을 사용하여 우리는 자바스크립트로 하나의 신경 네트워크를 구축하여 하나하나 지수를 배울 것이다.Dannjs는 프로젝트에서 신경 네트워크를 간단하게 실현할 수 있는 새로운 소스 라이브러리입니다.
스스로 신경 네트워크를 만드는 것은 이 개념 자체를 익히는 좋은 방법이다.이것도 상대적으로 간단하다.우리가 사용할 라이브러리 Dannjs는 깨끗하고 간단한 코드를 작성하는 것을 더욱 쉽게 할 것이다.
선결 조건:
  • Nodejs
  • Dannjs
  • 신경 네트워크에 대한 추상적인 지식
  • 우리는 먼저 이진수의 기초 지식을 이해합시다.
    우리의 신경 네트워크 계수를 가르치기 위해서, 우리는 이미 알고 있는 정수를 2진 데이터 (4자리) 로 변환할 것이다.각 비트는 신경 네트워크의 입력/출력 신경원에 대응한다.

    이상적인 상황에서, 우리는 우리의 네트워크가 다음에 우리가 제공한 숫자를 출력하도록 훈련하기를 바란다.예를 들어 만약에 우리가 네트워크[0,0,0,1]에 송전한다면 우리는 그것이 출력되기를 희망한다[0,0,1,0].볼 정보는 4개의 공간만 있기 때문에 우리의 모델은 최대 15개만 계산할 수 있는데 이것은 2진법 중의 1111개에 해당한다.모델에 더 많은 입력과 출력을 추가할 수 있습니다.이 경우 데이터 집합이 더 커야 다섯 개의 정보를 수용할 수 있습니다.

    프로젝트 설정


    우선, 프로젝트 디렉터리에 Dannjs를 로컬로 설치할 것입니다.
    npm i dannjs
    
    우리는 현재 주 js 파일에 노드 모듈을 설치해야 한다.
    const Dannjs = require('dannjs');
    const Dann = Dannjs.dann;
    

    신경 네트워크 만들기


    이것이 바로 우리가 신경 네트워크를 만드는 방법이다.우리는 4비트 2진 데이터를 입력하기 위해 그것에 4개의 입력 신경원을 주었다.우리는 또한 모델이 출력하는 4비트 2진법 데이터에 4개의 출력 신경원을 제공할 것이다.
    const countingNN = new Dann(4,4);
    
    우리는 지금 약간의 숨겨진 층을 추가해야 한다.나는 16개의 신경원이 충분히 잘 작동하는 것을 발견했다.나중에 이 값을 사용하여 실험할 수 있습니다.숨김층은 기본적으로 계산을 실행할 수 있는 신경원층이다.입력/출력층과 달리'숨김'의 이름은 모든 신경원의 값을 볼 필요가 없다는 사실에서 비롯된다.숨겨진 층에 대한 더 많은 정보와 기초 지식을 알 수 있습니다here.우리는 또한 활성화 함수'leakyReLU'를 설정하고 활성화 함수도 위의 링크에서 설명할 것이다.
    const countingNN = new Dann(4,4);
    countingNN.addHiddenLayer(16,'leakyReLU');
    countingNN.lr = 0.01;
    
    기술적으로 말하자면, 우리는 이미 모델의 창설을 완성했다.우리는 즉시 Dann.log(); 명령을 사용하거나 모델에 4개의 데이터를 제공하여 그것을 테스트할 수 있다.
    countingNN.log();
    countingNN.feedForward([0,0,1,0],{log:true});
    
    log 함수는 우리가 방금 만든 모델에 대한 정보를 보여 줍니다.우리는 또한 피드백 옵션에서 모델 예측을 기록할 내용을 지정했다.
    Dann NeuralNetwork:
      Layers:
        Input Layer:   4
        hidden Layer: 16  (leakyReLU)
        output Layer: 4  (sigmoid)
      Other Values:
        Learning rate: 0.01
        Loss Function: mse
        Latest Loss: 0
    
    Prediction:  [0.5398676880698,0.6730987170697,0.6748741672290,0.6377646387674]
    
    우리는 이것이 우리에게 무작위 예측을 주었다는 것을 알 수 있다.분명히 이것은 발생할 것이다. 왜냐하면 우리는 모델을 훈련한 적이 없기 때문이다.... 우리의 모델을 훈련하기 위해서 우리는 어떤 데이터 집합을 필요로 하고, 신경 네트워크가 주어진 입력에 따라 무엇을 출력하는지 알려야 한다.

    데이터 세트 설정


    훈련 모형을 위해 우리는 데이터 집합이 필요하다.다음은 4비트 2진 계수에 사용되는 경량급 js 데이터 집합입니다.기본적으로 다음과 같습니다.
    const dataset4bit = [
    
        //...
        {
            input:[1,0,1,0],
            target:[1,0,1,1]
        },
        //  {
        //      input:[1,0,1,1],
        //      target:[1,1,0,0]
        //  },
        {
            input:[1,1,0,0],
            target:[1,1,0,1]
        },
    
        //...
    ];
    
    데이터 세트에 액세스할 수 있음here
    이 데이터 집합은 4자리 2진수x를 입력값으로 하고 4자리 2진수x+1를 목표값으로 하는 것을 볼 수 있다.나는 원소[1,0,1,1]를 주석해 버렸다. 그러면 우리는 신경 네트워크에서 본 적이 없는 테스트 샘플을 얻을 수 있다.데이터에 액세스하려면 위의 GitHub gist에 포함된 코드를 복사하여 binary CountData에 저장할 수 있습니다.js와 우리의 항목은 같은 디렉터리에 있습니다.그런 다음 파일을 요청할 수 있습니다.
    const dataset = require('./binaryCountData.js').dataset;
    
    이제 다음과 같은 방법으로 데이터에 액세스할 수 있습니다.
    dataset[i].input
    dataset[i].target
    
    이제 우리는 데이터 집합에 접근할 수 있습니다. 데이터 집합 그룹의 모든 데이터 지점 호출 Dann.backpropagate(); 을 위해 그것을 적용할 수 있습니다.이것은 사용자가 제공한 데이터에 따라 모델의 무게를 조정할 것입니다.
    for (data of dataset) {
        countingNN.backpropagate(data.input,data.target);
    }
    
    이것은 하나의 기원이라고 할 수 있다.우리는 데이터가 집중된 모든 요소를 한 번씩 훑어보았다.안타깝게도 신경망을 제대로 훈련시키기 위한 역원 1개가 부족하다.만족스러운 결과를 얻기 위해서는 여러 단계를 거쳐야 한다.우리는 훈련 후의 출력을 테스트하기 위해 Dann.feedForward();를 추가해야 한다.
    const epoch = 100000;
    for (let e=0; e < epoch;e++) {
        for (data of dataset) {
            countingNN.backpropagate(data.input,data.target);
        }
    }
    
    countingNN.feedForward([1,0,1,1],{log:true});
    
    10만 개 시대를 훈련한 후 수출:
    Prediction:  [0.999884854,0.9699951248,0.020084607062,0.008207215405]
    
    우리 성공했어!우리는 그것의 추측이 매우 가깝다는 것을 알 수 있다. [1,1,0,0] 이것은 좋은 답이다.
    최종 js 코드는 다음과 같습니다.
    const Dannjs = require('dannjs');
    const Dann = Dannjs.dann;
    const dataset = require('./binaryCountData.js').dataset4bit;
    
    const countingNN = new Dann(4,4);
    countingNN.addHiddenLayer(16,'leakyReLU');
    
    countingNN.lr = 0.01;
    
    countingNN.feedForward([1,0,1,1],{log:true});
    const epoch = 100000;
    for (let e=0; e < epoch;e++) {
        for (data of dataset) {
            countingNN.backpropagate(data.input,data.target);
        }
    }
    countingNN.feedForward([1,0,1,1],{log:true});
    
    이 강좌에서, 우리는 이진 정수를 계산하기 위해 신경 네트워크를 훈련했다.우리는 그것들을 우리의 신경 네트워크에 디지털화하기 위해 이진수가 어떻게 작동하는지 배웠다.그리고 우리는 Dannjs를 어떻게 사용하는지 배웠다. 이것은 새로운 신경 네트워크 라이브러리로, 막 출시되었는데, 아무런 필요도 없는 ML 지식이다.원하는 모든 설정, 실험, 게임을 마음대로 조정하면 어떤 영향이 있는지 파악할 수 있다.지식의 유일한 근원은 경험이다.
    daily.dev 모든 새로운 꼬리표에 가장 좋은 프로그램 뉴스를 제공할 수 있다.우리는 당신이 미래를 해독할 수 있도록 수백 개의 합격 원천을 배열할 것입니다.

    좋은 웹페이지 즐겨찾기