studies/Back-end

Tensorflow.js ์„ ํ˜•ํšŒ๊ท€๋ถ„์„ ๋ชจ๋ธ ์ƒ์„ฑ๊ณผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

Vada Kim 2021. 4. 17. 19:21
728x90
๋ฐ˜์‘ํ˜•

1. ๋ชจ๋ธ ์ƒ์„ฑ๊นŒ์ง€์˜ ๊ณผ์ •

let X = tf.input({ shape: [1] }); //๋…๋ฆฝ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜
let Y = tf.layers.dense({ units: 1 }).apply(X); //์ถœ๋ ฅ๋  ๊ฒฐ๊ณผ(์ข…์†)๋ณ€์ˆ˜ ๊ฐœ์ˆ˜
let model = tf.model({ inputs: X, outputs: Y }); //๋ชจ๋ธ ์ •์˜
let compileParam = { optimizer: tf.train.adam()/*๋ฐฉ์‹*/, loss: tf.losses.meanSquaredError/*์†์‹คํ•จ์ˆ˜*/ }
model.compile(compileParam); //๋ชจ๋ธ ์ปดํŒŒ์ผ๋ง

let fitParam = {
  epochs: 2000, //ํ•™์ŠตํšŸ์ˆ˜
    callbacks:{
    onEpochEnd: function(epoch, logs){
      //๋งค ํ•™์Šต๋งˆ๋‹ค ์ •ํ™•๋„ ํŒŒ์•…
      console.log('epoch', epoch, logs, 'ํ‰๊ท ์ œ๊ณฑ๊ทผ์˜ค์ฐจ: ', Math.sqrt(logs.loss))
    }
  }
}

model.fit(tf.tensor(๋…๋ฆฝ๋ณ€์ˆ˜ ๋ฐฐ์—ด), tf.tensor(์ข…์†๋ณ€์ˆ˜(๊ฒฐ๊ณผ) ๋ฐฐ์—ด), fitParam).then((result)=> {
	console.log("completed model fit")
});

โ€ป tf.tensor() ์— ๋“ค์–ด๊ฐˆ ์ธ์ž๋Š” ๋ฐฐ์—ดํ˜•์‹์ด์–ด์•ผ ํ•œ๋‹ค.

 

 

2. ๋ชจ๋ธ ํ…Œ์ŠคํŠธ ์ถœ๋ ฅ

model.predict(tf.tensor(ํ…Œ์ŠคํŠธ ํ•  ๋…๋ฆฝ๋ณ€์ˆ˜ ๋ฐฐ์—ด)).print()

 

3. ๋ชจ๋ธ ํ…Œ์ŠคํŠธ ๊ฐ’ ์–ป๊ธฐ

let result = model.predict(tf.tensor([10])).arraySync()[0][0]

๋˜๋Š” ํ•จ์ˆ˜์‹์„ ์ด์šฉํ•ด ์ง์ ‘ ๊ณ„์‚ฐํ•˜๊ธฐ / y=๊ฐ€์ค‘์น˜*x+ํŽธํ–ฅ

let weights = model.getWeights(); //๋ชจ๋ธ๋กœ๋ถ€ํ„ฐ ๊ฐ€์ค‘์น˜+ํŽธํ–ฅ ์–ป๊ธฐ
let weight = weights[0].arraySync()[0][0]; //๊ฐ€์ค‘์น˜
let bias = weights[1].arraySync()[0] //ํŽธํ–ฅ

let result = weight * ํ…Œ์ŠคํŠธ ํ•  ๋…๋ฆฝ๋ณ€์ˆ˜ ๊ฐ’ + bias

 

 

 

 ์ง€๋‚œ ์ฃผ๊ฐ„ ๋„ˆ๋ฌด ๋ฐ”๋น ์„œ ์˜ค๋Š˜ ์‰ฌ๋Š” ๊ฒธ ๊ทธ๋™์•ˆ ๋ฏธ๋ค„์˜จ ํ…์„œํ”Œ๋กœ์šฐ ๊ฐ•์˜๋ฅผ ๋ณด์•˜๋Š”๋ฐ ๊ฝค ์žฌ๋ฐŒ๋‹ค. ์—ฌ์œ ์žˆ๊ฒŒ ์ƒˆ๋กœ์šด ๊ฑธ ๊ณต๋ถ€ํ•œ ํ•˜๋ฃจ์—ฌ์„œ ๋„ˆ๋ฌด ํ–‰๋ณตํ•˜๋””.

 

 

  • ์ฐธ๊ณ 

opentutorials.org/course/4628/29772

728x90
๋ฐ˜์‘ํ˜•