Rya*_*zzo 2 tensorflow tensorflow.js
我正在使用 加载一个简单的 Tensorflow.js 模型tf.loadLayersModel(),但该模型并未构建。我正在使用功能 API 来构建模型,但仅由密集层组成。Lambda 层似乎出现了类似的错误,但我只使用了 2 个密集层,并且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()
Run Code Online (Sandbox Code Playgroud)
触发它的JS代码:
const http = tf.io.http
tf.loadLayersModel(http(url)).then((model) => {
console.log('Loaded model.')
console.log(model)
})
Run Code Online (Sandbox Code Playgroud)
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"}]}]}
Run Code Online (Sandbox Code Playgroud)
想要重现模型?这是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)
Run Code Online (Sandbox Code Playgroud)
注意:
该 URL 有点冗长(它是 Firebase 存储下载 URL),我不相信 IOHandler ( http) 可以weightPathPrefix完美解析。我不知道这是该问题,甚至一个问题,但如果它是不正确的,我不知道如何检查它的计算值,可能会产生问题。
版本:
JS: Tensorflow.js : 2.0.1
Py: Tensorflowjs : 2.0.1.post1
Py: Keras : 2.4.3
Run Code Online (Sandbox Code Playgroud)
问题似乎出在模型权重的解析上(请参阅注意)。我之前将这个示例添加到了有关该功能的GitHub 票证中tf.loadLayersModel(),其中包含许多有关尝试解决方案的详细信息。
Python tensorflowFunctional用作函数模型的类名,但 tfjs 在内部为它们使用不同的名称。
尝试改变modelTopology.model_config.class_name在model.json给Model。
| 归档时间: |
|
| 查看次数: |
2814 次 |
| 最近记录: |