Tensorflow NodeJS-序列化/反序列化模型而不将其写入URI

时间:2019-04-05 09:54:22

标签: node.js tensorflow

在NodeJS中使用Tensorflow。我已经使用以下方法训练了模型:

const model = await model.fit(inputs, expected, {
    epochs: 100,
    shuffle: true,
    batchSize: 100,
    verbose: 0
});

现在,我想采用该模型并将其序列化为字符串值。请注意,我不想将其保存到文件系统或API端点(model.save(...))中,我想将其表示形式存储在变量中(即,我想要一个变量,该变量包含与我的值相同的值) d在文件中查找是否使用了model.save(...))。

我想要类似model.serialize()之类的东西,将模型作为具有权重的字符串或JSON对象返回给我,例如,这样我以后就可以重构模型而不必被迫从文件系统或必须手动加载每个重量,单位等。

1 个答案:

答案 0 :(得分:0)

好的,我找到了一种方法,如果有其他需要帮助的人,我将在下面发布:

要将模型保存到JSON字符串:

let result = await model.save(tf.io.withSaveHandler(async modelArtifacts => modelArtifacts));
result.weightData = Buffer.from(result.weightData).toString("base64");
const jsonStr = JSON.stringify(result);

然后再次加载:

const json = JSON.parse(jsonStr);
const weightData = new Uint8Array(Buffer.from(json.weightData, "base64")).buffer;
const model = await tf.loadLayersModel(tf.io.fromMemory(json.modelTopology, json.weightSpecs, weightData));

弄乱weightData是必要的,因为ArrayBuffer没有序列化为JSON。如果有办法避免这种情况,那就很好。

这是@ tensorflow / tfjs-node v1.0.3