项目可以让你利用WebGL在GPU驱动的、你的欣赏器上运行练习好的Keras模子。模子直接根据KerasJSON格式设置文件和关联的HDF5权重而序列化(serialized)。
项目地点:https://github.com/transcranial/keras-js
互动演示
用于MNIST的根本卷积网络
在MNIST上练习的卷积变自编码器(ConvolutionalVariationalAutoencoder)
在ImageNet上练习的50层的残差网络(ResidualNetwork)
在ImageNet上练习的InceptionV3
用于IMDB感情分类的双向LSTM
为什么要做这个项目?
消除对后端底子办法或API调用的需求
完全将盘算卸载到客户端欣赏器
互动应用程序
利用方法
查察demos/src/获取真实案例的源代码。
1.对Model和Sequential都实用
model=Sequential()
model.add(...)
...
...
model=Model(input=...,output=...)
一旦练习完成,生存权重和导出模子架构设置:
model.save_weights('model.hdf5')
withopen('model.json','w')asf:
f.write(model.to_json())
拜见演示的jupyternotebooks相识详情:demos/notebooks/
2.在HDF5权重文件上运行编码器脚本:
$pythonencoder.py/path/to/model.hdf5
这将在同一个文件夹中产生两个用作HDF5权重的文件:model_weights.buf和model_metadata.json
3.Keras.js所需的三个文件:
模子文件:model.json
权重文件:model_weights.buf
权重元数据文件:model_metadata.json
4.GPU支持由weblas(https://github.com/waylonflinn/weblas)驱动。将Keras.js和Weblas库包罗进去:
src="lib/weblas.js"/
src="dist/keras.js"/
5.创建新模子
实例化时,数据通过XHR(雷同域或要求CORS)加载,层被初始化为有向无环图。当这些步调完成之后,类方法ready()返回一个办理题目的Promise。然后,利用perdict()让数据通过模子,这也会返回一个Promise。
constmodel=newKerasJS.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(()={
//inputdataobjectkeyedbynamesoftheinputlayers
//or`input`forSequentialmodels
//valuesaretheflattenedFloat32Arraydata
//(inputtensorshapesarespecifiedinthemodelconfig)
constinputData={
'input_1':newFloat32Array(data)
}
//makepredictions
//outputDataisanobjectkeyedbynamesoftheoutputlayers
//or`output`forSequentialmodels
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
循环:SimpleRNN,LSTM,GRU
包装器:Bidirectional,TimeDistributed
还没有实现的层
如今还不能直接实现Lambda,但终极会创建一个通过Java界说盘算逻辑的机制。
内核:Lambda
卷积:Cropping1D,Cropping2D,Cropping3D
本地毗连:LocallyConnected1D,LocallyConnected2D
噪声:GaussianNoise,GaussianDropout
备注
WebWorker及其限定
Keras.js可以与主线程分开单独运行在WebWorker中。由于Keras.js会实行大量同步盘算,这可以防止该UI受到影响。但是,WebWorker的最大限定之一是缺乏canvas访问(以是要用WebGL)。以是在单独的线程中运行Keras.js的长处被必须运行在CPU模式中的要求抵消了。换句话说,在GPU模式中运行的Keras.js只能运行在主线程上。
WebGLMAX_TEXTURE_SIZE
在GPU模式中,张量对象被编码成了盘算之前的WebGLtextures。这些张量的巨细由gl.getParameter(gl.MAX_TEXTURE_SIZE)限定,这会根据硬件或平台的状态而有所差别。参考https://webglstats.com/相识典范的预期值。在im2col之后,卷积层中大概会有一个题目。比如在InceptionV3网络演示中,第一层卷积层中im2col创造了一个22201x27的矩阵,并在第二层和第三层卷积层中创造21609x288的矩阵。第一个维度上的巨细高出了MAX_TEXTURE_SIZE的最大值16384,以是必须被分割开。根据权重为每一个分割开的张量实行矩阵乘法,然后再组合起来。在这个案例中,当createWeblasTensor()被调用时,Tensor对象上会提供一个weblasTensorsSplit属性。相识其利用的例子可查察src/layers/convolutional/Convolution2D.js
开辟/测试
对于每一个实现的层都存在广泛的测试。查察notebooks/获取为全部这些测试天生数据的jupyternotebooks。
$npminstall
要运行全部测试,实行npmrunserver并访问https://localhost:3000/test/。全部的测试都会主动运行。打开你的欣赏器的开辟工具获取额外的测试数据信息。
对于开辟,请运行:
$npmrunwatch
编辑src/中的恣意文件都会触发webpack来更新dist/keras.js。
要创建生产型的UMDwebpack版本,输出到dist/keras.js,运行:
$npmrunbuild
证书
MIT:https://github.com/transcranial/keras-js/blob/master/LICENSE
文章泉源:呆板之心
《Node.js项目实战:从编写代码到服务器摆设以实现一个根本功能完备的论坛体系入手,以实现业务逻辑为主,力图显现编写Node.js项目标整个流程。同时在实现过程中也会先容各种常用模块的根本利用方法,比如express、supertest、mocha、passport、mysql、pm2、async、webpack等。点击下方二维码查察课程详情
我要评论