안녕하세요.
기계과감성쟁이입니다.
생활코딩 '이고잉'님의 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>