You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将训练好的TensorFlow.Keras.Sequential模型导出为FMU文件

将Keras神经网络模型转换为FMU格式的步骤

1. 保存训练好的Keras模型

在你的训练代码末尾添加保存逻辑,把模型存为Keras支持的格式:

# 保存训练完成的模型
model.save("trained_nn_model.h5")  # 也可使用SavedModel格式:model.save("trained_nn_model")

2. 安装必要依赖

执行以下命令安装转换所需的工具库:

pip install fmpy tensorflow numpy

3. 封装模型并导出FMU

通过fmpy将Keras模型的预测逻辑封装为符合FMI规范的FMU,示例代码如下:

import numpy as np
import tensorflow as tf
from fmpy import export_fmu

# 加载已保存的模型
trained_model = tf.keras.models.load_model("trained_nn_model.h5")

# 定义FMU的预测逻辑
def nn_predict(inputs):
    # 转换输入格式以匹配模型要求
    input_array = np.array(inputs, dtype=np.float32).reshape(1, -1)
    # 执行预测并关闭日志输出
    prediction = trained_model.predict(input_array, verbose=0)
    # 展平输出适配FMU格式
    return prediction.flatten()

# 导出FMU文件
export_fmu(
    function=nn_predict,
    # 定义输入变量,数量与模型输入特征数一致
    inputs=[(f"feature_{i}", "real") for i in range(trained_model.input_shape[1])],
    # 定义输出变量
    outputs=[("prediction", "real")],
    model_name="NeuralNetworkFMU",
    # 指定FMI版本,可选2.0或3.0
    fmi_version="2.0",
    save_path="NeuralNetworkFMU.fmu"
)

4. 验证FMU正确性

用fmpy模拟FMU,对比其输出与原模型是否一致:

from fmpy import simulate_fmu
import numpy as np

# 生成测试输入,维度匹配模型输入
test_features = np.random.rand(trained_model.input_shape[1])

# 运行FMU模拟
sim_result = simulate_fmu(
    "NeuralNetworkFMU.fmu",
    start_time=0,
    stop_time=1,
    input={f"feature_{i}": test_features[i] for i in range(trained_model.input_shape[1])},
    output=["prediction"]
)

# 对比输出结果
fmu_output = sim_result["prediction"][-1]
model_output = trained_model.predict(test_features.reshape(1, -1), verbose=0)[0][0]

print(f"原模型输出: {model_output:.6f}")
print(f"FMU输出: {fmu_output:.6f}")

注意事项

  • 确保FMU定义的输入变量数量与模型输入特征数完全匹配
  • 若需使用FMI 3.0标准,只需修改export_fmu中的fmi_version参数为"3.0"
  • 含自定义层或复杂逻辑的模型,需提前验证自定义代码在FMU运行环境中的兼容性

内容的提问来源于stack exchange,提问作者aborammez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:22:56