備忘錄_20160105(定位)
修改
回首頁
程式 2019-10-01 01:06:21 1569863181 100
tensorflow javascript 初體驗,尋找 y=ax+b 的 a 與 b
tensorflow javascript 初體驗,尋找 y=ax+b 的 a 與 b
20191001_test01.htm
index.html (另一個測試)
index.html (y=a*x1^2+b*x2+c) (請開啟 主控台 觀看結果)
yolo 可以參考 https://medium.com/cubo-ai/tensorflow-js-%E5%88%9D%E6%8E%A2-yolo-3be7e63f7c96
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<!-- Load TensorFlow.js -->
<!-- <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js"> </script> -->
<script src="tf.min.js"> </script> <!-- tf.min.js 與 tf.min.js.map 是需要的兩個檔案 -->
</head>
<body>
<div>運用 tensorflow javascript 版本來解決參數尋找的問題。</div>
<br>
<div> y = ax + b = 3.8x + 7.2</div>
<br>
<div id="div0"></div>
<hr>
<div id="div1"></div>
<div id="div2"></div>
<script>
function gebi(strId)
{
return document.getElementById(strId);
}
const correctAnswerA = 3.8; // 正確答案
const correctAnswerB = 7.2; // 正確答案
const dataCount = 100; // 訓練資料筆數
const iterations = 1000; // 疊代次數
window.onload=function()
{
const trainingData = generateTrainingData(dataCount, correctAnswerA, correctAnswerB);
learnCoefficients(trainingData, iterations);
}
const trainingAnswerA = tf.variable(tf.scalar(Math.random()));
const trainingAnswerB = tf.variable(tf.scalar(Math.random()));
function generateTrainingData(numPoints, answerA, answerB)
{
return tf.tidy(() =>
{
// 產生常態分佈的隨機資料
const xs = tf.randomNormal([numPoints], -1, 1);
// 套用正確模型產生答案
const ansA = tf.scalar(answerA);
const ansB = tf.scalar(answerB);
const ys = ansA.mul(xs).add(ansB);
// 回傳訓練資料與答案
return {xs, ys};
})
}
function predict(x)
{
// 假定已知公式是 y=ax+b 才有辦法寫出這個 predict 函數
return tf.tidy(() => { return trainingAnswerA.mul(x).add(trainingAnswerB) });
}
function loss(predictions, labels)
{
const meanSquareError = predictions.sub(labels).square().mean();
return meanSquareError;
}
function train(xs, ys, numIterations)
{
const learningRate = 0.15;
const optimizer = tf.train.sgd(learningRate);
for (let iter = 0; iter < numIterations; iter++)
{
optimizer.minimize(() =>
{
const predsYs = predict(xs);
return loss(predsYs, ys);
});
}
}
async function learnCoefficients(trainingData, iterations)
{
gebi("div0").innerHTML='Correct Answer: '+(correctAnswerA)+' , '+(correctAnswerB);
gebi("div1").innerHTML='Before Training: '+(await trainingAnswerA.data())+' , '+(await trainingAnswerB.data());
// Train the model!
await train(trainingData.xs, trainingData.ys, iterations);
// 印出訓練結果
gebi("div2").innerHTML='After TRaining: '+(await trainingAnswerA.data())+' , '+(await trainingAnswerB.data());
}
</script>
</body>
</html>