TensorFlow.js機(jī)器學(xué)習(xí)預(yù)測鳶尾花種類
一、加載IRIS數(shù)據(jù)集
創(chuàng)建index.html入口文件,跳轉(zhuǎn)到script主文件。
<script src="script.js"></script>
在script.js文件夾中利用預(yù)先準(zhǔn)備好的腳本生成鳶尾花數(shù)據(jù)集,包括訓(xùn)練集和驗(yà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ù)集的時(shí)候,將20%的數(shù)據(jù)當(dāng)成測試集,剩下的80%當(dāng)成訓(xùn)練集。
xTrain:訓(xùn)練集的特征值。
yTrain:訓(xùn)練集的目標(biāo)值。
xTest:驗(yàn)證集的特征值。
yTest:驗(yàn)證集的目標(biāo)值。
可以在控制臺查看到結(jié)果:
其中特征矩陣?yán)锩娴乃膫€(gè)值分別表示:花萼的長度、花萼的寬度、花瓣的長度、花瓣的寬度。
目標(biāo)值矩陣采用one-hot編碼形式。
二、定義模型結(jié)構(gòu)
初始化一個(gè)神經(jīng)網(wǎng)絡(luò)模型,為神經(jīng)網(wǎng)絡(luò)模型添加兩層,配置模型的損失函數(shù)、激活函數(shù)、優(yōu)化器、添加準(zhǔn)確度度量。
// 定義網(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)練好的模型進(jì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ù)的順序不能錯(cuò),因?yàn)槲覀冇?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動圖有點(diǎn)模糊,可以自己動手試試看哦。
到此這篇關(guān)于TensorFlow.js機(jī)器學(xué)習(xí)預(yù)測鳶尾花種類的文章就介紹到這了,更多相關(guān)TensorFlow.js預(yù)測鳶尾花內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用js判斷數(shù)組中是否包含某一元素(類似于php中的in_array())
這篇文章主要是對使用js判斷數(shù)組中是否包含某一元素(類似于php中的in_array())需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12bootstrap與pagehelper實(shí)現(xiàn)分頁效果
這篇文章主要為大家詳細(xì)介紹了bootstrap與pagehelper實(shí)現(xiàn)分頁效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12深入理解JavaScript系列(1) 編寫高質(zhì)量JavaScript代碼的基本要點(diǎn)
才華橫溢的Stoyan Stefanov,在他寫的由O’Reilly初版的新書《JavaScript Patterns》(JavaScript模式)中,我想要是為我們的讀者貢獻(xiàn)其摘要,那會是件很美妙的事情2012-01-01javascript實(shí)現(xiàn)頁面的實(shí)時(shí)時(shí)鐘顯示示例
這篇文章主要介紹了javascript實(shí)現(xiàn)頁面的實(shí)時(shí)時(shí)鐘顯示示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08layui select 禁止點(diǎn)擊的實(shí)現(xiàn)方法
今天小編就為大家分享一篇layui select 禁止點(diǎn)擊的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09