gpt4 book ai didi

Tensorflow.js 错误 : Unknown layer: Functional

转载 作者:行者123 更新时间:2023-12-05 08:30:37 24 4
gpt4 key购买 nike

我正在使用 tf.loadLayersModel() 加载一个简单的 Tensorflow.js 模型,但模型并未构建。我正在使用函数式 API 构建模型,但只包含密集层。类似错误seems to arise使用 Lambda 层,但我只使用 2 个密集层和功能层 are supported在 Tf.js 中。

完整错误:

Error: Unknown layer: Functional. This may be due to one of the following reasons:
1. The layer is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
2. The custom layer is defined in JavaScript, but is not registered properly with tf.serialization.registerClass()

触发它的JS代码:

const http = tf.io.http

tf.loadLayersModel(http(url)).then((model) => {
console.log('Loaded model.')
console.log(model)
})

url 的获取内容(又名 model.json 文件)

{"format": "layers-model", "generatedBy": "keras v2.4.0", "convertedBy": "TensorFlow.js Converter v2.0.1.post1", "modelTopology": {"keras_version": "2.4.0", "backend": "tensorflow", "model_config": {"class_name": "Functional", "config": {"name": "my_model", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": [null, 10], "dtype": "float32", "sparse": false, "ragged": false, "name": "input_1"}, "name": "input_1", "inbound_nodes": []}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 20, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "name": "dense", "inbound_nodes": [[["input_1", 0, 0, {}]]]}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 20, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "name": "dense_1", "inbound_nodes": [[["dense", 0, 0, {}]]]}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 10, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "name": "dense_2", "inbound_nodes": [[["dense_1", 0, 0, {}]]]}], "input_layers": [["input_1", 0, 0]], "output_layers": [["dense_2", 0, 0]]}}, "training_config": {"loss": "mse", "metrics": "accuracy", "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "RMSprop", "config": {"name": "RMSprop", "learning_rate": 0.001, "decay": 0.0, "rho": 0.9, "momentum": 0.0, "epsilon": 1e-07, "centered": false}}}}, "weightsManifest": [{"paths": ["group1-shard1of1.bin"], "weights": [{"name": "dense/kernel", "shape": [10, 20], "dtype": "float32"}, {"name": "dense/bias", "shape": [20], "dtype": "float32"}, {"name": "dense_1/kernel", "shape": [20, 20], "dtype": "float32"}, {"name": "dense_1/bias", "shape": [20], "dtype": "float32"}, {"name": "dense_2/kernel", "shape": [20, 10], "dtype": "float32"}, {"name": "dense_2/bias", "shape": [10], "dtype": "float32"}]}]}

想要重现模型?这是 python 代码:

import keras
import keras.layers as layers
import tensorflowjs as tfjs

inputs = keras.Input(shape=(10,))
dense = layers.Dense(20, activation="relu")
x = dense(inputs)
x = layers.Dense(20, activation="relu")(x)
outputs = layers.Dense(10)(x)

# Create the model
model = keras.Model(inputs=inputs, outputs=outputs, name="my_model")

KEY = 'sampleid'
MDL = 'mymodel'

model.compile(loss='mse',metrics='accuracy')

tfjs.converters.save_keras_model(model, MDL)

注意:该 URL 有点冗长(它是一个 Firebase 存储下载 URL),我不确定 IOHandler (http) 能否完美解析 weightPathPrefix。我不确定这是问题还是一个问题,但如果它不正确并且我不知道如何检查它的计算值,它可能会产生问题。

版本:

JS:  Tensorflow.js : 2.0.1
Py: Tensorflowjs : 2.0.1.post1
Py: Keras : 2.4.3

20 年 7 月 29 日更新:

问题似乎出在模型权重的解析中(请参阅注释)。我将此示例添加到 GitHub ticket关于前面的 tf.loadLayersModel() 函数,其中包含许多有关尝试解决方案的详细信息。

最佳答案

Python tensorflow 使用 Functional 作为函数模型的类名,但 tfjs 在内部使用不同的名称。

尝试将 model.json 中的 modelTopology.model_config.class_name 更改为 Model

关于Tensorflow.js 错误 : Unknown layer: Functional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63143849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com