TensorFlow.js機器學(xué)習預(yù)測鳶尾花種類
一、加載IRIS數(shù)據(jù)集
創(chuàng)建index.html入口文件,跳轉(zhuǎn)到script主文件。
<script src="script.js"></script>
在script.js文件夾中利用預(yù)先準備好的腳本生成鳶尾花數(shù)據(jù)集,包括訓(xùn)練集和驗證集,并打印查看。
import {getIrisData, IRIS_CLASSES} from "./data.js";
window.onload = () => {
// 加載數(shù)據(jù)
const [xTrain, yTrain, xTest, yTest] = getIrisData(0.2);
// 打印查看數(shù)據(jù)集
xTrain.print();
yTrain.print();
xTest.print();
yTest.print();
// 打印鳶尾花種類類別
console.log(IRIS_CLASSES);
}getIrisData(0.2):獲取數(shù)據(jù)集的時候,將20%的數(shù)據(jù)當成測試集,剩下的80%當成訓(xùn)練集。
xTrain:訓(xùn)練集的特征值。
yTrain:訓(xùn)練集的目標值。
xTest:驗證集的特征值。
yTest:驗證集的目標值。
可以在控制臺查看到結(jié)果:

其中特征矩陣里面的四個值分別表示:花萼的長度、花萼的寬度、花瓣的長度、花瓣的寬度。
目標值矩陣采用one-hot編碼形式。
二、定義模型結(jié)構(gòu)
初始化一個神經(jīng)網(wǎng)絡(luò)模型,為神經(jīng)網(wǎng)絡(luò)模型添加兩層,配置模型的損失函數(shù)、激活函數(shù)、優(yōu)化器、添加準確度度量。
// 定義網(wǎng)絡(luò)模型
const model = tf.sequential();
// 添加隱藏層
model.add(tf.layers.dense({
units: 10,
inputShape: [xTrain.shape[1]],
activation: 'relu'
}));
// 添加輸出層
model.add(tf.layers.dense({
units: 3,
activation: 'softmax'
}));
// 配置模型
model.compile({
loss: "categoricalCrossentropy",
optimizer: tf.train.adam(0.1),
metrics: ['accuracy']
});三、訓(xùn)練模型并可視化
訓(xùn)練結(jié)果需要等待,所以采用異步方式訓(xùn)練。
await model.fit(xTrain, yTrain,{
epochs: 100,
batchSize: 32,
validationData: [xTest, yTest],
callbacks: tfvis.show.fitCallbacks(
{name: '訓(xùn)練效果'},
['loss', 'val_loss', 'acc', 'val_acc'],
{callbacks: ['onEpochEnd']}
)
}); 訓(xùn)練結(jié)果:

四、預(yù)測
編寫前端界面輸入待預(yù)測數(shù)據(jù),使用訓(xùn)練好的模型進行預(yù)測,將輸出的Tensor轉(zhuǎn)成普通數(shù)據(jù)并顯示。
在index.html中編寫form表單,用來輸入預(yù)測數(shù)據(jù)。
<form action="" onsubmit="predict(this); return false">
花萼長度:<input type="text" name="a"><br>
花萼寬度:<input type="text" name="b"><br>
花瓣長度:<input type="text" name="c"><br>
花瓣寬度:<input type="text" name="d"><br>
<button type="submit">預(yù)測</button>
</form>輸入數(shù)據(jù)的順序不能錯,因為我們訓(xùn)練數(shù)據(jù)的順序就是花萼長度、花萼寬度、花瓣長度、花瓣寬度。
在Script.js中編寫predict預(yù)測函數(shù)。
window.predict = (form) => {
// 將表單獲取的到數(shù)據(jù)轉(zhuǎn)成Tensor
const input = tf.tensor([[
form.a.value * 1,
form.b.value * 1,
form.c.value * 1,
form.d.value * 1,
]]);
// 預(yù)測
const pred = model.predict(input);
alert(`預(yù)測結(jié)果:${IRIS_CLASSES[pred.argMax(1).dataSync(0)]}`)
}預(yù)測結(jié)果:gif動圖有點模糊,可以自己動手試試看哦。

到此這篇關(guān)于TensorFlow.js機器學(xué)習預(yù)測鳶尾花種類的文章就介紹到這了,更多相關(guān)TensorFlow.js預(yù)測鳶尾花內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js es6系列教程 - 基于new.target屬性與es5改造es6的類語法
下面小編就為大家?guī)硪黄猨s es6系列教程 - 基于new.target屬性與es5改造es6的類語法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
JavaScript輸入分鐘、秒倒計時技巧總結(jié)(附代碼)
這篇文章主要介紹了JavaScript輸入分鐘、秒倒計時的代碼實現(xiàn),通過css和js代碼展示了邏輯過程,具體操作步驟大家可查看下文的詳細講解,感興趣的小伙伴們可以參考一下。2017-08-08
JavaScript實現(xiàn)簡易計算器功能的兩種方法
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)簡易計算器功能的兩種方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07
動態(tài)添加option及createElement使用示例
動態(tài)添加option在某些特殊的情況下還是比較實用的,本文有個小示例為大家介紹下createElement使用,感興趣的朋友可以參考下2014-01-01
javascript setAttribute, getAttribute 在不同瀏覽器上的不同表現(xiàn)
該方法把指定的屬性設(shè)置為指定的值。如果不存在具有指定名稱的屬性,該方法將創(chuàng)建一個新屬性。2010-08-08

