歡迎訪問弘鋒機(jī)械官網(wǎng)
手機(jī):15662672636
電話:15662672636
郵箱:didihay@qq.com
地址:遼寧省沈陽市渾南區(qū)
發(fā)布時(shí)間:2025-08-06 點(diǎn)此:1132次
項(xiàng)目可以讓你使用 WebGL 在 GPU 驅(qū)動(dòng)的、你的瀏覽器上運(yùn)行訓(xùn)練好的 Keras 模型。模型直接根據(jù) Keras JSON 格式配置文件和關(guān)聯(lián)的 HDF5 權(quán)重而序列化(serialized)。
項(xiàng)目地址:https://github.com/transcranial/keras-js
互動(dòng)演示
用于 MNIST 的基本卷積網(wǎng)絡(luò)
在 MNIST 上訓(xùn)練的卷積變自編碼器(Convolutional Variational Autoencoder)
在 ImageNet 上訓(xùn)練的 50 層的殘差網(wǎng)絡(luò)(Residual Network)
在 ImageNet 上訓(xùn)練的 Inception V3
用于 IMDB 情緒分類的雙向 LSTM
為什么要做這個(gè)項(xiàng)目?
消除對(duì)后端基礎(chǔ)設(shè)施或 API 調(diào)用的需求
完全將計(jì)算卸載到客戶端瀏覽器
互動(dòng)應(yīng)用程序
使用方法
查看 demos/src/ 獲取真實(shí)案例的源代碼。
1. 對(duì) Model 和 Sequential 都適用
model = Sequential()
model.add(...)
...
...
model = Model(input=..., output=...)
一旦訓(xùn)練完成,保存權(quán)重和導(dǎo)出模型架構(gòu)配置:
model.save_weights('model.hdf5')
with open('model.json', 'w') as f:
f.write(model.to_json())
參見演示的 jupyter notebooks 了解詳情:demos/notebooks/
2. 在 HDF5 權(quán)重文件上運(yùn)行編碼器腳本:
$ python encoder.py /path/to/model.hdf5
這將在同一個(gè)文件夾中產(chǎn)生兩個(gè)用作 HDF5 權(quán)重的文件:model_weights.buf 和 model_metadata.json
3.Keras.js 所需的三個(gè)文件:
模型文件:model.json
權(quán)重文件:model_weights.buf
權(quán)重元數(shù)據(jù)文件:model_metadata.json
4.GPU 支持由 weblas(https://github.com/waylonflinn/weblas) 驅(qū)動(dòng)。將 Keras.js 和 Weblas 庫包含進(jìn)去:
< src="lib/weblas.js"></>
< src="dist/keras.js"></>
5. 創(chuàng)建新模型
實(shí)例化時(shí),數(shù)據(jù)通過 XHR(相同域或要求 CORS)加載,層被初始化為有向無環(huán)圖。當(dāng)這些步驟完成之后,類方法 ready() 返回一個(gè)解決問題的 Promise。然后,使用 perdict() 讓數(shù)據(jù)通過模型,這也會(huì)返回一個(gè) Promise。
const model = new KerasJS.Model({
filepaths: {
model: 'url/path/to/model.json',
weights: 'url/path/to/model_weights.buf',
metadata: 'url/path/to/model_metadata.json'
}
gpu: true
})
model.ready().then(() => {
// input data object keyed by names of the input layers
// or `input` for Sequential models
// values are the flattened Float32Array data
// (input tensor shapes are specified in the model config)
const inputData = {
'input_1': new Float32Array(data)
}
// make predictions
// outputData is an object keyed by names of the output layers
// or `output` for Sequential models
model.predict(inputData).then(outputData => {
// e.g.,
// outputData['fc1000']
})
})
可用的層
高級(jí)激活: LeakyReLU, PReLU, ELU, ParametricSoftplus, ThresholdedReLU, SReLU
卷積: Convolution1D, Convolution2D, AtrousConvolution2D, SeparableConvolution2D, Deconvolution2D, Convolution3D, UpSampling1D, UpSampling2D, UpSampling3D, ZeroPadding1D, ZeroPadding2D, ZeroPadding3D
內(nèi)核: Dense, Activation, Dropout, SpatialDropout2D, SpatialDropout3D, Flatten, Reshape, Permute, RepeatVector, Merge, Highway, MaxoutDense
嵌入: Embedding
歸一化: BatchNormalization
池化: MaxPooling1D, MaxPooling2D, MaxPooling3D, AveragePooling1D, AveragePooling2D, AveragePooling3D, GlobalMaxPooling1D, GlobalAveragePooling1D, GlobalMaxPooling2D, GlobalAveragePooling2D
循環(huán): SimpleRNN, LSTM, GRU
包裝器: Bidirectional, TimeDistributed
還沒有實(shí)現(xiàn)的層
目前還不能直接實(shí)現(xiàn) Lambda,但最終會(huì)創(chuàng)建一個(gè)通過 Java 定義計(jì)算邏輯的機(jī)制。
內(nèi)核: Lambda
卷積: Cropping1D, Cropping2D, Cropping3D
本地連接: LocallyConnected1D, LocallyConnected2D
噪聲:GaussianNoise, GaussianDropout
備注
WebWorker 及其限制
Keras.js 可以與主線程分開單獨(dú)運(yùn)行在 WebWorker 中。因?yàn)?Keras.js 會(huì)執(zhí)行大量同步計(jì)算,這可以防止該 UI 受到影響。但是,WebWorker 的最大限制之一是缺乏 <canvas> 訪問(所以要用 WebGL)。所以在單獨(dú)的線程中運(yùn)行 Keras.js 的好處被必須運(yùn)行在 CPU 模式中的要求抵消了。換句話說,在 GPU 模式中運(yùn)行的 Keras.js 只能運(yùn)行在主線程上。
WebGL MAX_TEXTURE_SIZE
在 GPU 模式中,張量對(duì)象被編碼成了計(jì)算之前的 WebGL textures。這些張量的大小由 gl.getParameter(gl.MAX_TEXTURE_SIZE) 限定,這會(huì)根據(jù)硬件或平臺(tái)的狀況而有所不同。參考 https://webglstats.com/ 了解典型的預(yù)期值。在 im2col 之后,卷積層中可能會(huì)有一個(gè)問題。比如在 Inception V3 網(wǎng)絡(luò)演示中,第一層卷積層中 im2col 創(chuàng)造了一個(gè) 22201 x 27 的矩陣,并在第二層和第三層卷積層中創(chuàng)造 21609 x 288 的矩陣。第一個(gè)維度上的大小超過了 MAX_TEXTURE_SIZE 的最大值 16384,所以必須被分割開。根據(jù)權(quán)重為每一個(gè)分割開的張量執(zhí)行矩陣乘法,然后再組合起來。在這個(gè)案例中,當(dāng) createWeblasTensor() 被調(diào)用時(shí),Tensor 對(duì)象上會(huì)提供一個(gè) weblasTensorsSplit 屬性。了解其使用的例子可查看 src/layers/convolutional/Convolution2D.js
開發(fā)/測(cè)試
對(duì)于每一個(gè)實(shí)現(xiàn)的層都存在廣泛的測(cè)試。查看 notebooks/ 獲取為所有這些測(cè)試生成數(shù)據(jù)的 jupyter notebooks。
$ npm install
要運(yùn)行所有測(cè)試,執(zhí)行 npm run server 并訪問 https://localhost:3000/test/。所有的測(cè)試都會(huì)自動(dòng)運(yùn)行。打開你的瀏覽器的開發(fā)工具獲取額外的測(cè)試數(shù)據(jù)信息。
對(duì)于開發(fā),請(qǐng)運(yùn)行:
$ npm run watch
編輯 src/ 中的任意文件都會(huì)觸發(fā) webpack 來更新 dist/keras.js。
要?jiǎng)?chuàng)建生產(chǎn)型的 UMD webpack 版本,輸出到 dist/keras.js,運(yùn)行:
$ npm run build
證書
MIT:https://github.com/transcranial/keras-js/blob/master/LICENSE
文章來源:機(jī)器之心
《Node.js項(xiàng)目實(shí)戰(zhàn):從編寫代碼到服務(wù)器部署以實(shí)現(xiàn)一個(gè)基本功能完整的論壇系統(tǒng)入手,以實(shí)現(xiàn)業(yè)務(wù)邏輯為主,力求展現(xiàn)編寫Node.js項(xiàng)目的整個(gè)流程。同時(shí)在實(shí)現(xiàn)過程中也會(huì)介紹各種常用模塊的 基本使用方法,比如express、supertest、mocha、passport、mysql、pm2、async、webpack等。點(diǎn)擊下方二維碼查看課程詳情
相關(guān)推薦