TensorFlowJs 和 Google 存储 | tf.loadLayersModel 的 CORS 错误

TensorFlowJs & Google Storage | CORS Error with tf.loadLayersModel

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

从以下 link 使用 'Example 1' ("Load a model from an HTTP server") 加载模型时: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' header。如果不透明响应满足您的需求,请将请求的模式设置为 'no-cors' 以在禁用 CORS 的情况下获取资源。

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

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

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


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

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