无法使用 Tensorflow.js 加载经过训练的模型
Can't load trained model with Tensorflow.js
我的模型 (tf.keras.Sequential) 在 Python 中训练,我使用 tfjs.converters.save_keras_model() 将其转换为 TF.js 层格式。
我在文件夹中创建了一个服务器(其中包含 *.bin 文件和一个 'model.json'),在 cmd 中使用 'http-server'。
之后,我 运行 加载模型的代码:
(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
我不知道如何修复它。
所以这是 CORS(跨源资源共享)的问题 - 您需要的不仅仅是简单的 Web 服务器来提供文件。
对于任何您想在网站上跨域使用的静态文件(例如您拥有的 bin 和 json 文件),您需要通过网络为这些文件设置正确的 header服务器,以便浏览器知道可以在此类网站上使用。
这与跨域的网络安全有关,同时它吸引了很多人了解它的重要性。不确定你是什么网络服务器 运行 但如果你使用 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 headers 正确且易于使用和制作原型。 https://glitch.com/@TensorFlowJS
我的模型 (tf.keras.Sequential) 在 Python 中训练,我使用 tfjs.converters.save_keras_model() 将其转换为 TF.js 层格式。 我在文件夹中创建了一个服务器(其中包含 *.bin 文件和一个 'model.json'),在 cmd 中使用 'http-server'。 之后,我 运行 加载模型的代码:
(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
我不知道如何修复它。
所以这是 CORS(跨源资源共享)的问题 - 您需要的不仅仅是简单的 Web 服务器来提供文件。
对于任何您想在网站上跨域使用的静态文件(例如您拥有的 bin 和 json 文件),您需要通过网络为这些文件设置正确的 header服务器,以便浏览器知道可以在此类网站上使用。
这与跨域的网络安全有关,同时它吸引了很多人了解它的重要性。不确定你是什么网络服务器 运行 但如果你使用 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 headers 正确且易于使用和制作原型。 https://glitch.com/@TensorFlowJS