【问题标题】:Can't load trained model with Tensorflow.js无法使用 Tensorflow.js 加载经过训练的模型
【发布时间】:2020-04-30 08:55:42
【问题描述】:

我的模型 (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

我不知道如何解决它。

【问题讨论】:

    标签: javascript tensorflow tensorflow.js


    【解决方案1】:

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

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

    这与跨域的网络安全有关,虽然它吸引了很多人,但拥有它很重要。不确定您正在运行什么 Web 服务器,但如果您使用 Express 和 Node.js,请查看这个简单的教程:

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

    或者这个库:

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

    请注意 Allow-Origin 部分,您需要在该部分设置您计划使用它的域。如果您希望任何人也能够毫无问题地在他们的网站上使用这些文件,您也可以使用通配符 * 来允许所有域。

    哦,有趣的是,如果您根本不想处理 Web 服务器,请尝试 Glitch.com,它允许您托管实验项目并上传资产(如果这只是为了好玩) - 它正确设置了所有 CORS 标头,并且易于使用和原型的东西。 https://glitch.com/@TensorFlowJS

    【讨论】:

    • 非常感谢。这对我真的很有帮助。我是网络编程新手,所以找到这样的解决方案并不容易。
    • 非常欢迎!一旦你了解了基础知识,尽管它变得超级强大 - 网络的覆盖面和规模确实是史诗般的,并且会在未来为你带来红利。祝你旅途愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2017-07-28
    • 2018-04-21
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多