首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将TFRecord输出到

将TFRecord输出到
EN

Stack Overflow用户
提问于 2019-02-14 19:05:59
回答 3查看 1.4K关注 0票数 4

我知道tf.python_io.TFRecordWriter有一个GCS的概念,但是它似乎没有写它的权限。

如果我这样做的话:

代码语言:javascript
复制
output_path = 'gs://my-bucket-name/{}/{}.tfrecord'.format(object_name, record_name)
writer = tf.python_io.TFRecordWriter(output_path)
# write to writer
writer.close()

然后我会听到401人说:“匿名呼叫者没有storage.objects.create访问我的桶名。”

但是,在同一台机器上,如果我执行gsutil rsync -d r gs://my-bucket-name bucket-backup,它就会正确地同步它,因此我已经正确地使用了gcloud进行了身份验证。

如何授予TFRecordWriter写入GCS的权限?我现在只使用Google的,但我确信有一种方法可以单独使用TF来实现。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-14 21:41:43

在系统上设置凭据的一个常见策略是使用应用程序默认凭据(ADC)。ADC是一种定位帐户凭据的策略。

如果设置了环境变量GOOGLE_APPLICATION_CREDENTIALS,ADC将使用变量指向的文件名作为服务帐户凭据。此文件是一个Json格式的帐户凭据文件。不推荐以前的P12 (PFX)证书。

如果没有设置环境变量,则如果应用程序运行在Compute Engine、App、Kubernetes引擎或Cloud函数上,则默认服务帐户用于凭据。

如果前两个步骤找不到有效的凭据,ADC将失败,并发生错误。

对于此问题,ADC无法找到凭据,并且TensorFlow写入GCS失败。

解决方案是将环境变量GOOGLE_APPLICATION_CREDENTIALS设置为指向服务帐户Json文件。

对于Linux:

代码语言:javascript
复制
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json

Windows操作系统

代码语言:javascript
复制
set GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\service-account.json

我写了一篇更详细的关于ADC的文章。

Google应用程序默认凭据

票数 4
EN

Stack Overflow用户

发布于 2019-02-14 20:11:40

当您使用gsutil命令时,您正在使用Cloud中配置的GCP用户(执行:gcloud config list查看)。显然,您的python脚本没有在GCP中进行身份验证。

我相信这有一个更好的方法来解决这个问题(对不起,我对TensorFlow不太了解),但是我可以找到两个解决办法来解决这个问题:

First option -使用云熔点云存储存储桶安装为文件系统

第二个选项-在本地编写并稍后移动。在这种方法中,您可以使用以下代码:

代码语言:javascript
复制
# Service Account file
JSON_FILE_NAME = '<Service account json file>'


# Imports the Google Cloud client library
from google.cloud import storage

# Instantiates a client
storage_client = storage.Client.from_service_account_json(JSON_FILE_NAME)

#Example file (using the service account)
source_file_path = 'your file path'
destination_blob_name = 'name of file in gcs'
# The name for the new bucket
bucket_name = '<bucket_name>'


bucket = storage_client.get_bucket(bucket_name)

blob = bucket.blob(destination_blob_name)

blob.upload_from_filename(source_file_path)

print('File {} uploaded to {}.'.format(
    source_file_path,
    destination_blob_name))
票数 1
EN

Stack Overflow用户

发布于 2021-08-28 14:13:37

请注意,导出命令不会在jupyter笔记本中工作。如果你在笔记本电脑里,这个应该能用

代码语言:javascript
复制
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path/to/json'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54697451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档