我正在使用论文:Keras2c:用于转换 Keras 神经网络的库 网络到实时兼容的 C,以将 Keras 中制作的模型转换为 C。因为我需要在计算能力很小的硬件上对其进行编译。 API如何转型?基本上,它从扩展模型 (.h) 加载权重并将其转换为三个不同的文件:
因此,keras2c 文档展示了它的用法。但是,当我执行以下函数时:
from keras2c import k2c
k2c("classification_model.h5", "modelC", malloc=False, num_tests=10, verbose=True)
显示以下错误:
Traceback (most recent call last):
File "c:\Users\dossa\Desktop\keras2c-master\convert.py", line 2, in <module>
k2c("classification_model.h5", "modelC", malloc=False, num_tests=10, verbose=True)
File "c:\Users\dossa\Desktop\keras2c-master\keras2c\keras2c_main.py", line 216, in k2c
check_model(model, function_name)
File "c:\Users\dossa\Desktop\keras2c-master\keras2c\check_model.py", line 232, in check_model
raise AssertionError(log)
AssertionError: The following errors were found:
Functional' is not supported at this time.
有人用过这个API吗,能帮我解决这个问题吗?
我不熟悉 keras2c(虽然想法很酷),但我可能可以告诉你为什么会发生错误以及如何修复它。
Keras 有两个 API:功能性 API https://keras.io/guides/function_api/ 和顺序 API https://keras.io/guides/sequential_model/
从错误信息来看,keras2c似乎只支持顺序API。
尝试在简单的顺序模型上运行 keras2c,首先看看是否有效:
import keras
from keras import layers
model = keras.Sequential(
[
layers.Dense(2, activation="relu"),
layers.Dense(3, activation="relu"),
layers.Dense(4),
]
)
from keras2c import k2c
k2c(model, "modelC", malloc=False, num_tests=10, verbose=True)
如果可行,您必须弄清楚您真正想要使用的模型是否可以重写为等效的顺序模型。