Keras模型(通常通過Python API創(chuàng)建)的存儲(chǔ)格式可以有多種, 其中“整個(gè)模型”(即架構(gòu)+權(quán)重+優(yōu)化器狀態(tài)都存在一個(gè)文件內(nèi))格式可以轉(zhuǎn)換為 TensorFlow.js Layers格式,可以直接加載到TensorFlow.js中進(jìn)行推理或進(jìn)一步訓(xùn)練。
TensorFlow.js Layers格式是一個(gè)包含model.json文件和一組二進(jìn)制格式的權(quán)重文件分片的目錄。 model.json文件包含模型拓?fù)浣Y(jié)構(gòu)(又名“體系結(jié)構(gòu)”或“圖”:層的描述以及它們?nèi)绾芜B接)以及權(quán)重文件的清單。
要求
運(yùn)行模型格式轉(zhuǎn)換程序需要Python環(huán)境;如果你想要一個(gè)獨(dú)立的環(huán)境,你可以使用pipenv或virtualenv。要安裝轉(zhuǎn)換器,請(qǐng)使用這個(gè)命令
pip install tensorflowjs
將Keras模型導(dǎo)入TensorFlow.js可以分為兩個(gè)步驟。首先,將現(xiàn)有的Keras模型轉(zhuǎn)換為TF.js Layers格式,然后將其加載到TensorFlow.js中。
1、將Keras模型轉(zhuǎn)換為TF.js Layers格式
Keras模型通常使用model.save(filepath)保存,它生成一個(gè)包含模型拓?fù)浣Y(jié)構(gòu)和權(quán)重的HDF5(.h5)文件。要將這樣的文件轉(zhuǎn)換為TF.js Layer格式,請(qǐng)運(yùn)行以下命令,其中path / to / my_model.h5是Keras .h5源文件,path / to / tfjs_target_dir是TF.js文件的輸出目錄:
# bash
tensorflowjs_converter --input_format keras \
path/to/my_model.h5 \
path/to/tfjs_target_dir
這一步驟的另一個(gè)方案:使用Python API直接導(dǎo)出為TF.js Layers格式
如果您在Python中使用Keras模型,則可以將其直接導(dǎo)出為TensorFlow.js Layers格式,如下所示:
# Python
import tensorflowjs as tfjs
def train(...):
model = keras.models.Sequential() # for example
...
model.compile(...)
model.fit(...)
tfjs.converters.save_keras_model(model, tfjs_target_dir)
2、將模型加載到TensorFlow.js中
使用Web服務(wù)器來為您在步驟1中生成的轉(zhuǎn)換模型文件提供服務(wù)。請(qǐng)注意,為了允許JavaScript獲取文件,您可能需要配置服務(wù)器以允許跨源資源共享(CORS)。
然后通過提供model.json文件的URL將模型加載到TensorFlow.js中:
// JavaScript
import * as tf from '@tensorflow/tfjs';
const model = await tf.loadModel('https://foo.bar/tfjs_artifacts/model.json');
現(xiàn)在該模型已準(zhǔn)備好進(jìn)行推理,評(píng)估或重新訓(xùn)練。例如,加載的模型可以立即用于預(yù)測(cè):
// JavaScript
const example = tf.fromPixels(webcamElement); // for example
const prediction = model.predict(example);
TensorFlow.js Examples中的很多例子都采用此方法,使用已在Google云端存儲(chǔ)上轉(zhuǎn)換并托管的預(yù)訓(xùn)練模型。
請(qǐng)注意,您使用model.json文件名來引用整個(gè)模型。 loadModel(...)獲取model.json,然后發(fā)出額外的HTTP(S)請(qǐng)求以獲取model.json權(quán)重清單中引用的權(quán)重文件分片。這種方法允許所有這些文件被瀏覽器緩存(也可能通過互聯(lián)網(wǎng)上的其他緩存服務(wù)器),因?yàn)閙odel.json和weight shard分別小于典型的緩存文件大小限制。因此,模型可能會(huì)在隨后的場(chǎng)合更快加載。
TensorFlow.js Layers目前僅支持使用標(biāo)準(zhǔn)Keras構(gòu)造的Keras模型。使用了不受支持的操作或?qū)樱ɡ缱远x層,Lambda層,自定義損失或自定義指標(biāo))的模型將無法自動(dòng)導(dǎo)入,因?yàn)樗鼈兯蕾嚨腜ython代碼無法正確地轉(zhuǎn)換為JavaScript。
更多建議: