TensorFlow.JS로 간단한 함수를 학습시켜 보았다(초보의 초보/그 1)

1, TensorFlow.JS에서 간단한 함수 학습



HTML/JavaScript만으로 기계 학습이 가능한 TensorFlow.JS로 여러가지 시험해 보았습니다. 프로그램은 가능한 한 간단하게 작성하도록 유의했습니다. 실제 동작은 여기(간단한 1차 함수 학습) 또는 여기 (일부 함수 학습)을 클릭하십시오.

1-1, 1차 함수 학습



처음에 가장 간단한 1차 함수(y=ax+b)를 학습시켜 보겠습니다. 절차는 다음과 같습니다.
(1) 학습 모델을 작성한다.
"여기에서는 간단한 입력 레이어와 출력 레이어 만 학습 모델을 만듭니다. x의 값을 입력층에 넣으면 출력층에 y의 값이 나오는 이미지입니다. 활성화 함수는 학습 대상에 맞추어 「linear」로 하고 있습니다.

TensorFlow.JS용 학습 모델 작성
const model = tf.sequential();
 model.add(tf.layers.dense({
    inputShape: [ 1 ],
    activation: 'linear',
    units: 1
 }));

그림으로 쓰면 이런 느낌입니까?


(2) 학습용 입력 데이터(x)와 교사 데이터(y)를 준비한다.
랜덤한 x의 값으로부터 y=ax+b의 값을 계산하고, 그것을 1 세트로서 소정수의 학습용 배열 데이터(xTrainData, yTrainData)와 검증용 배열 데이터(xTestData, yTestData)를 작성한다.
(3) 작성한 데이터를 TensorFlow.JS 용으로 변환한다.

TensorFlow.JS용 데이터로 변환
  const xTrain = tf.tensor2d( xTrainData, [ xTrainData.length, 1 ], 'float32' );
  const yTrain = tf.tensor2d( yTrainData, [ yTrainData.length, 1 ], 'float32' );
  const xTest = tf.tensor2d( xTestData, [ xTestData.length, 1 ], 'float32' );
  const yTest = tf.tensor2d( yTestData, [ yTestData.length, 1 ], 'float32' );

(4) 학습 실행
작성한 학습 데이터 (xTrain, yTrain)를 사용하여 학습하고 검증 데이터로서 xTest와 yTest를 지정하고 있습니다. 덧붙여서 callbacks의 내용은, 도중 경과의 표시입니다.

학습 수행
// 学習過程の設定
  model.compile({
    loss: "meanSquaredError",
    optimizer: 'sgd'
  });
// 学習と学習経過をdspに格納
  const history = await model.fit( xTrain, yTrain, {
    epochs: epochData,
    validationData:[ xTest, yTest ],
    callbacks: {
        onEpochEnd: async (epoch, logs) => {
        dsp = dsp + ("      " + (Train_count + epoch)).slice(-7) + " : " + logs.loss + " / " + logs.val_loss + "\n";
        document.getElementById("dump").value = dsp;
        },
    }
  });

(5) 평가용 데이터를 TensorFlow.JS용으로 변환한다.
평가용으로 입력한 x의 값(d_00)을 TensorFlow.JS용으로 변환합니다.

평가용 데이터 변환
    const inputData = tf.tensor2d( [ d_00 ], [ 1, 1 ], 'float32' );

(6) 평가 실행
여기서, results가 평가 결과(y의 값의 추정치)입니다.

평가 수행
    const outputData = model.predict(inputData);
    var results = outputData.dataSync();

실제 동작은 여기(간단한 1차 함수 학습)을 클릭하십시오. 학습이 진행되는 것을 알 수 있다고 생각합니다.

1-2, 몇 가지 함수와 CSV 데이터 학습



다음에 몇개의 함수 혹은 로컬의 CSV데이터를 학습시켜 봅시다. 기본적인 순서는 상기와 마찬가지입니다만, 이번 사용하는 함수 데이터는 미리 CSV 데이터로서 작성해 두고, 거기로부터 필요수 랜덤으로 추출해 학습용과 검증용으로 하고 있습니다. 또, 학습 모델은 중간층 2층까지 지정할 수 있도록 했습니다. 각 중간층의 단위 수 및 활성화 함수를 지정하여 학습 모델을 구축할 수 있습니다.

학습 모델 설정
    if(Dense == 2) {                      // 2中間層の場合
    model.add(tf.layers.dense({units: UN_1, activation: Act_01, inputShape: [1]}));
    model.add(tf.layers.dense({units: UN_2, activation: Act_02}));
    model.add(tf.layers.dense({units: 1, activation: Act_00}));
    } else if(Dense == 1) {               // 1中間層の場合
    model.add(tf.layers.dense({units: UN_1, activation: Act_01, inputShape: [1]}));
    model.add(tf.layers.dense({units: 1, activation: Act_00}));
    } else {                              // 中間層なしの場合
    model.add(tf.layers.dense({units: 1, activation: Act_00, inputShape: [1]}));
    } 

실제 동작은 여기 (일부 함수 학습)을 클릭하십시오. 학습 모델의 설정에 따라 학습 실행시의 진행 정도가 크게 다른 것을 알 수 있다고 생각합니다.

TensorFlow.JS를 사용해 본 기사 내용



1, TensorFlow.JS로 간단한 함수를 학습시켜 보았다
2, TensorFlow.JS에서 아야메의 분류를 배웠습니다.
3, TensorFlow.JS에서 수동 입력 숫자 인식을 학습했습니다.
4, TensorFlow.JS에서 이미지 인식 (분류)을 배웠습니다.

여기에 기재된 HTML/JavaScript의 동작을 확인하고 싶은 분은 "http://hal322.html.xdomain.jp/" 를 참조해 주세요.

좋은 웹페이지 즐겨찾기