AWS S3 和 Sagemaker:没有这样的文件或目录



我创建了一个 S3 存储桶'testshivaproject'并在其中上传了一张图片。当我尝试在 sagemaker 笔记本中访问它时,它会抛出错误"没有这样的文件或目录"。

# import libraries
import boto3, re, sys, math, json, os, sagemaker, urllib.request
from sagemaker import get_execution_role
import numpy as np                                   
# Define IAM role
role = get_execution_role()
my_region = boto3.session.Session().region_name # set the region of the instance
print("success :"+my_region)

输出:成功:美国东部-2

role

输出:">arn:aws:iam::847047967498:role/service-role/AmazonSageMaker-ExecutionRole-20190825T121483">

bucket = 'testprojectshiva2' 
data_key = 'ext_image6.jpg' 
data_location = 's3://{}/{}'.format(bucket, data_key) 
print(data_location)

输出: s3://testprojectshiva2/ext_image6.jpg

test = load_img(data_location)

输出:没有这样的文件或目录

提出了类似的问题(将 S3 数据加载到 AWS SageMaker 笔记本中),但没有找到任何解决方案?

感謝您使用 Amazon SageMaker!

我有点从您的描述中猜到,但是您是否尝试使用 Keras load_img 函数直接从 S3 存储桶加载图像?

不幸的是,load_img函数被设计为仅从磁盘加载文件,因此将 s3://URL 传递给该函数将始终返回FileNotFoundError

在使用映像之前,通常先从 S3 下载映像,因此您可以在调用 load_img 之前使用 boto3 或 AWS CLI 下载文件。

或者,由于 load_img 函数只是创建一个 PIL Image 对象,因此您可以使用 boto3 直接从 S3 中的数据创建 PIL 对象,而根本不使用 load_img 函数。

换句话说,你可以做这样的事情:

from PIL import Image
s3 = boto3.client('s3')
test = Image.open(BytesIO(
s3.get_object(Bucket=bucket, Key=data_key)['Body'].read()
))

希望这对您的项目有所帮助!

您可以使用以下代码将 CSV 文件拉入 sagemaker。

import pandas as pd
bucket='your-s3-bucket'
data_key = 'your.csv'
data_location = 's3://{}/{}'.format(bucket, data_key)
df = pd.read_csv(data_location)

data_location变量的替代格式:

data_location = f's3://{bucket}/{data_key}'

相关内容

  • 没有找到相关文章

最新更新