0

我正在大致按照教程在 Google Cloud AI 平台上训练 TensorFlow 估计器。

我想访问一个包含我的训练和评估数据的目录,为此我将我的数据文件递归复制到 Google 存储,如下所示:

gsutil cp -r data gs://name-of-my-bucket/data

这工作正常,并gsutil ls gs://name-of-my-bucket/data正确返回:

gs://name-of-my-bucket/data/test.json
gs://name-of-my-bucket/data/test
gs://name-of-my-bucket/data/train

但是,从 Python 脚本调用os.listdir(data_dir)会引发我迄今为止尝试过FileNotFoundError的任何值,包括and 。为什么?data_dir'data/''name-of-my-bucket/data/'

我知道我的 Python 脚本正在从目录执行。/root/.local/lib/python3.7/site-packages/trainer/ /user_dir

出现问题的 Python 代码(编辑)

这是出现错误的行之前的代码,直接来自__main__我的 Python 脚本部分:

PARSER = argparse.ArgumentParser()
PARSER.add_argument('--job-dir', ...)
PARSER.add_argument('--eval-steps', ...)
PARSER.add_argument('--export-format', ...)

ARGS = PARSER.parse_args()
tf.logging.set_verbosity('INFO')
os.environ['TF_CPP_MIN_LOG_LEVEL'] = str(tf.logging.__dict__['INFO'] / 10)

HPARAMS = hparam.HParams(**ARGS.__dict__)

这是出现错误的代码行(在我上面报告的代码行之后立即调用的单独函数的第一行):

mug_dirs = [f for f in os.listdir(image_dir) if not f.startswith('.')]

日志(编辑)

我的这项工作的日志是一个信息列表(加上 5 个与 TensorFlow 相关的弃用警告),然后是来自任务的错误:master-replica-0

Traceback (most recent call last): File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 114, in <module> train_model(HPARAMS) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 55, in train_model (train_data, train_labels) = data.create_data_with_labels("data/train/") File "/root/.local/lib/python3.7/site-packages/trainer/data.py", line 13, in create_data_with_labels mug_dirs = [f for f in os.listdir(image_dir) if not f.startswith('.')] FileNotFoundError: [Errno 2] No such file or directory: 'data/train/'

...随后是来自同一任务的另一个错误(从我的 Python 命令报告非零退出状态),然后是关于清理的两个信息,最后是来自任务的错误:service

The replica master 0 exited with a non-zero status of 1. Traceback (most recent call last): File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 114, in <module> train_model(HPARAMS) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 55, in train_model (train_data, train_labels) = data.create_data_with_labels("data/train/") File "/root/.local/lib/python3.7/site-packages/trainer/data.py", line 13, in create_data_with_labels mug_dirs = [f for f in os.listdir(image_dir) if not f.startswith('.')] FileNotFoundError: [Errno 2] No such file or directory: 'data/train/' To find out more about why your job exited please check the logs: https://console.cloud.google.com/logs/viewer?project=1047296516162&resource=ml_job%2Fjob_id%2Fml6_run_25&advancedFilter=resource.type%3D%22ml_job%22%0Aresource.labels.job_id%3D%22ml6_run_25%22
4

2 回答 2

1

您可以使用 tensorflow API 来获取 GCP 目录中的所有文件。你可以参考他们的文档:https ://www.tensorflow.org/api_docs/python/tf/io/gfile/glob

例如,如果你想获取你的 GCP 下的所有 json 文件,你可以使用这个:

import tensorflow as tf

json_files = tf.io.gfile.glob("gs://name-of-my-bucket/data/"+"*.json")
于 2020-07-29T14:05:59.687 回答
0

Cloud Storage 对象是一个平面命名空间,不包含在文件夹中。由于更加用户友好的体验,gsutil 和 Google Cloud Storage UI 将创建分层文件树的错觉。更多信息可以在文档中找到。

现在,如果您尝试读取托管在 Cloud Storage 上的文件对象,您可能需要使用以下文档通过 Cloud Storage 客户端库将对象下载到本地目录。或者,您也可以使用gsutil cp命令,它允许您在本地目录和 Cloud Storage 存储分区之间复制数据,以及其他选项。

从本地目录中的 GCS 存储桶下载副本对象后,您将能够根据需要操作所述文件。

更新 - 引用 Cloud Storage 对象文件 - 不os.listdir用于访问 GCS 存储桶对象。

由于 Cloud Storage 是一个平面命名空间,因此一个 Cloud Storage 存储桶gs://my-bucket/data/test.json将包含一个名为 storage 的对象,data/test.json存储在gs://my-bucket. 请注意,对象名称包含/字符。因此,如果您想访问例如test.json您存储桶中的文件,您可以查看上面的文档并data/test.json用作参考 - 文件夹的概念本身并不存在。或者,如果您需要访问您的火车文件对象,您可以data/train用作参考。

于 2020-03-31T10:31:07.650 回答