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