无法使用Tensorflow.js加载经过训练的模型

时间:2020-04-30 08:55:42

标签: javascript tensorflow tensorflow.js

我的模型(tf.keras.Sequential)受过Python训练,我通过使用tfjs.converters.save_keras_model()将其转换为TF.js图层格式。 我在cmd中使用“ http-server”在文件夹(包含* .bin文件和“ model.json”)中创建了服务器。 之后,我运行以下代码来加载模型:

(async () => {
        const model = await tf.loadLayersModel('http://127.0.0.1:8080/model.json');
        console.log('done');
    })();

这对我不起作用,这3个错误出现在我的控制台中:

Access to fetch at 'http://127.0.0.1:8080/model.json' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
GET http://127.0.0.1:8080/model.json net::ERR_FAILED
Uncaught (in promise) Error: Request for http://127.0.0.1:8080/model.json failed due to error: TypeError: Failed to fetch
    at tf.min.js:2

我不知道如何解决它。

1 个答案:

答案 0 :(得分:0)

因此,这是CORS(跨源资源共享)的问题-您不仅需要简单的Web服务器来提供文件。

对于要在网站上的所有域中使用的任何静态文件(例如您拥有的bin和json文件),您需要通过网络服务器为这些文件设置正确的标头,以便浏览器知道可以在其上使用这样的网站。

这与跨域的网络安全有关,尽管它使很多人意识到其重要性。不确定正在运行的Web服务器是什么,但是如果您将Express与Node.js结合使用,请查看以下简单教程:

https://enable-cors.org/server_expressjs.html

或此库:

https://medium.com/@alexishevia/using-cors-in-express-cac7e29b005b

请注意“允许来源”部分,您需要在该部分设置计划使用其的域。如果您希望任何人也可以使用通配符*允许所有域在其站点上使用它们而不会出现问题,则可以使用通配符*。

哦,有趣的是,如果您根本不想使用Web服务器,请尝试使用Glitch.com,该网站可让您托管实验项目并上传资产(如果这只是出于娱乐目的)-它可以正确设置所有CORS标头,并且易于使用和原型制作。 https://glitch.com/@TensorFlowJS