공부/코딩

[TensorFlow.js] 개요 및 독립변수와 종속변수가 1개일 때

안녕하세요.

기계과감성쟁이입니다.

 

생활코딩 '이고잉'님의 TensorFlow.js 강의 1강부터 8강까지의 내용을 공부하며 기록한 내용들입니다.

누군가에게 설명하기 위해 적은 내용들이 아니라 깔끔하지 못하다는 점 참고해주세요.

 

텐서플로우 라이브러리는 기본적으로 파이썬으로 사용하는 라이브러리임.
하지만 TensorFlow.js 는 자바스크립트가 실행환경에서 이용가능 (거의 대부분의 환경에서 이용가능)
사용자의 컴퓨팅 파워을 이용할 수 있어서 비용을 절약할 수도 있음.

지도학습의 작업순서가 학교에서 공부한 Numerical Method 의 진행 방식과 굉장히 유사하다

모델을 직접 만들거나, 기존 모델을 이용하는 방법이 있음.
아래에서 사용 가능.

https://www.tensorflow.org/js/models?hl=ko

통계학에서 배운 내용들이 나오기 시작.

callback 으로 보여지는 loss는 MSE(Mean Square Error)임.

7.

모델이란 : y=ax+b / a는 가중치(weight), b는 편향(bias), 근데 1차함수 형태 밖에 없나? 컴퓨터는 linear 한 계산이 편해서 그런가. 변수가 많아진다면 어떻게 계산함?

텐서에서 값을 가져오는 법 : array, arraysync()
이후 배열에 배열로 들어가면 원시데이터 형태 나옴

var weights = model.getWeights() 하면 배열에 값이 두개
첫번째가 weight, 두번째가 bias

8.

텐서플로우 튜토리얼 - 모델 저장 및 로드
https://www.tensorflow.org/js/guide/save_load?hl=ko
model.save('downloads://lemon') // await는 지움 <- 이건 파일로 다운
localstroage는 실행하고 브라우저 application 들어가면 저장된거 확인가능

load도 같은 페이지에 있음. 사용 가능
localstroage에 있는 것의 경우,
const model = await tf.loadLayersModel('localstorage://my-model');
를 사용하지 않고
tf.loadLayersModel('localstorage://lemon').then(function(model){
model.predict(tf.tensor([20])).print();
});
이런 식으로 사용함

 

아래는 위 내용을 실습하며 이용한 이고잉님의 코드입니다. 주석엔 제 메모들이 있습니다.

 

<!DOCTYPE html>
<html>

<head>
    <title>TensorFlow.js Tutorial - lemon</title>

    <!-- Import TensorFlow.js -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0/dist/tf.min.js"></script>
    
</head>

<body>
    <script>
        // 1. 과거의 데이터를 준비합니다. 
         var 온도 = [20,21,22,23];
         var 판매량 = [40,42,44,46];
         var 원인 = tf.tensor(온도); // 배열 형태의 데이터를 텐서 형태로 바꿔줌
         var 결과 = tf.tensor(판매량);

        // 2. 모델의 모양을 만듭니다. 
         var X = tf.input({ shape: [1] }); // 여기서 1은 column이 하나라는 것을 말함
         var Y = tf.layers.dense({ units: 1 }).apply(X);// 여기도 마찬가지
         var model = tf.model({ inputs: X, outputs: Y }); // 모델의 모양을 정의하는 함수
         var compileParam = { optimizer: tf.train.adam(), loss: tf.losses.meanSquaredError } // optimizer: 모델을 효율적으로 만드는 방법, loss: 모델의 정확성 검증방법 (대충)
         model.compile(compileParam);

        // 3. 데이터로 모델을 학습시킵니다. 
         //var fitParam = { epochs: 100} // 몇 번 학습할 것인가?
         var fitParam = { 
            epochs: 100, 
            callbacks:{
                onEpochEnd:
                    function(epoch, logs){
                            console.log('epoch', epoch, logs, 'RMSE=>', Math.sqrt(logs.loss));}}} // logs 는 loss라는 property를 가지고 있음. 얼마나 실행됐고, 얼마나 정확한지 확인 가능.
            model.fit(원인, 결과, fitParam).then(function (result) { // 여기다가 학습이 끝나면 실행될 내용을 넣으면 됨
            
            // 4. 모델을 이용합니다. 
            // 4.1 기존의 데이터를 이용
            var 예측한결과 = model.predict(원인); // 정말 중요! ... 내 생각 : 무엇을 predict 하는데...?
            예측한결과.print(); // 결과값도 텐서이기 때문에 print로 봐야함
            

         });  

        // 4.2 새로운 데이터를 이용
         var 다음주온도 = [15,16,17, 18, 19]
         var 다음주원인 = tf.tensor(다음주온도);
         var 다음주결과 = model.predict(다음주원인);
         다음주결과.print();
    </script>
</body>

</html>