如何将Keras权重转换为JSON?TensorFlowJS相关问题求助
解决TensorFlow.js加载Keras权重的问题
一、明确model.loadWeights()的核心用法
这个方法的作用是给TensorFlow.js的LayersModel加载权重,仅支持两种输入格式:
- 键为权重名称、值为嵌套数值数组的JSON对象
- 键为权重名称、值为
tf.Tensor对象的NamedTensorMap
关键提示:Keras原生的HDF5(.h5)权重文件无法直接传入,必须转成上述格式之一。
二、找到pykeras.py并转换权重
你找不到这个脚本是因为它不在node_modules中,而是属于TensorFlow.js的Python工具包:
- 先安装Python版TensorFlow.js:
pip install tensorflowjs
- 定位脚本位置:
- 虚拟环境下:路径一般是
venv/lib/pythonX.X/site-packages/tensorflowjs/scripts/pykeras.py - 全局安装下:路径通常是
/usr/local/lib/pythonX.X/site-packages/tensorflowjs/scripts/pykeras.py(X.X对应你的Python版本)
- 虚拟环境下:路径一般是
- 执行转换命令:
python 你的pykeras.py路径 convert --weights 你的模型.h5路径 --output_dir 输出目录
执行后会在输出目录生成JSON格式的权重文件,即可用于model.loadWeights()。
三、更简便的替代方案:使用tensorflowjs_converter
官方现在更推荐用这个工具直接转换整个模型(结构+权重),步骤更简洁:
- 安装好
tensorflowjs后执行:
tensorflowjs_converter --input_format keras 你的模型.h5路径 输出目录
- 转换完成后,输出目录会生成
model.json和权重文件,直接用以下代码加载整个模型即可,无需手动调用model.loadWeights():
import * as tf from '@tensorflow/tfjs'; async function loadModel() { const model = await tf.loadLayersModel('输出目录/model.json'); // 模型可直接使用 }
四、手动构建权重JSON(可选)
如果需要自定义权重转换,可在Python中手动提取并生成JSON:
import json from tensorflow.keras.models import load_model model = load_model('你的模型.h5') weights_dict = {} for layer in model.layers: for weight in layer.weights: weights_dict[weight.name] = weight.numpy().tolist() with open('weights.json', 'w') as f: json.dump(weights_dict, f)
之后在JS中加载该JSON并传入model.loadWeights():
async function loadWeights() { const model = await tf.loadLayersModel('模型结构.json'); // 先加载模型结构文件 const weightsData = await fetch('weights.json').then(res => res.json()); await model.loadWeights(weightsData); }
内容的提问来源于stack exchange,提问作者user12582392
相关产品推荐
相关产品推荐

