【问题标题】:TensorFlowJs & Google Storage | CORS Error with tf.loadLayersModelTensorFlowJs 和谷歌存储 | tf.loadLayersModel 出现 CORS 错误
【发布时间】:2019-11-28 18:53:48
【问题描述】:

我使用 TensorFlow 创建了一个基本模型,并将模型转换为 TensorFlowJs:tfjs.converters.save_keras_model(model, './jfk_ewr'),并将转换后的模型保存在 google 存储桶中。

从以下链接使用“示例 1”(“从 HTTP 服务器加载模型”)加载模型时:https://js.tensorflow.org/api/latest/#loadLayersModel 我收到 CORS 错误。

model = await tf.loadLayersModel('https://console.cloud.google.com/storage/browser/jfk/ewr/model.json');

错误: CORS 策略已阻止从源“null”获取“https://console.cloud.google.com/storage/browser/jfk/ewr/model.json”的访问权限:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。

【问题讨论】:

    标签: javascript google-cloud-storage tensorflow.js


    【解决方案1】:

    浏览器执行同源策略,阻止对来自不同来源的资源的请求。在您的情况下,当您尝试从未知来源获取存储在 Google Cloud Storage 中的模型时,会执行同源策略。

    因此,您既可以正确配置 CORS,也可以直接将其禁用。在这种特定情况下,您可以配置 Google Cloud Storage 存储桶以允许在包含您的 TensorFlow 模型的存储桶和发出所述请求的 HTTP 服务器之间进行资源请求。

    出于说明目的,假设我们想从 http://www.example.com 服务器获取 TensorFlow 模型。按照关于配置 CORS [1] 的 Google Cloud Storage 文档,我们首先将创建一个 .json 文件,其中包含有关允许哪些源执行 CORS 请求的所有必要配置信息。在上面的示例中,它看起来像这样:

    
    [
        {
          "origin": ["http://www.example.com"],
          "responseHeader": ["Content-Type"],
          "method": ["GET", "HEAD", "DELETE"],
          "maxAgeSeconds": 3600
        }
    ]
    

    在安装了 Cloud SDK [2] 的命令行中运行 gsutil cors set cors.json gs://example-bucket 将在您的存储桶和服务器之间配置 CORS。

    【讨论】:

    • 优秀!!!对于使用 Google Cloud Shell 的用户,我为最简单的 CORS 设置添加了链接 [3]
    猜你喜欢
    • 2015-04-03
    • 2015-05-09
    • 2016-10-02
    • 2018-09-27
    • 2017-02-10
    • 2018-07-16
    • 2017-09-05
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多