【发布时间】:2019-02-17 23:57:00
【问题描述】:
我想尝试使用 AWS 进行深度学习的图像分割。我将数据存储在 Amazon S3 上,我想从在 Amazon EC2 实例上运行的 Jupyter Notebook 访问它。
我正计划使用 Tensorflow 进行分割,因此使用 Tensorflow 自己提供的选项 (https://www.tensorflow.org/deploy/s3) 对我来说似乎是合适的,因为我觉得最终我希望我的数据以 tf 的格式表示.数据集。然而,这对我来说并不完全奏效。我尝试了以下方法:
filenames = ["s3://path_to_first_image.png", "s3://path_to_second_image.png"]
dataset = tf.data.TFRecordDataset(filenames)
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
with tf.Session() as sess:
for i in range(2):
print(sess.run(next_element))
我收到以下错误:
OutOfRangeError: End of sequence
[[Node: IteratorGetNext_6 = IteratorGetNext[output_shapes=[[]], output_types=[DT_STRING], _device="/job:localhost/replica:0/task:0/device:CPU:0"](OneShotIterator_6)]]
我对 tensorflow 还是很陌生,最近才开始尝试一些 AWS 的东西,所以我希望我的错误对有更多经验的人来说是显而易见的。我将不胜感激任何帮助或建议!也许这甚至是错误的方式,我最好使用 boto3 之类的东西(也偶然发现它,但认为 tf 在我的情况下更合适)或其他东西?
附: Tensorflow 还建议使用以下部分测试设置:
from tensorflow.python.lib.io import file_io
print (file_io.stat('s3://path_to_image.png'))
对我来说,这会导致 Object doesn't exist 错误,尽管该对象肯定存在,并且如果我使用它会在其他列表中列出
for obj in s3.Bucket(name=MY_BUCKET_NAME).objects.all():
print(os.path.join(obj.bucket_name, obj.key))
我还填写了我的凭据/.aws/credentials。这里可能有什么问题?
【问题讨论】:
-
您找到解决方案了吗?我仍然在使用
tf.data.TFRecordDataset和 s3 时遇到错误 -
@Roelant 嗨!正如我在 Farzan 的回答下的评论部分中提到的 - 我决定将我的所有文件移动到 EBS,该 EBS 可以安装到我的 EC2 实例并用作驱动器,因此所有文件都可以直接访问。最后,我没有弄清楚如何直接使用来自 S3 的数据进行训练,我建议将数据保存在运行代码的服务器上,因为它比必须不断下载数据要快几个数量级从云服务器。干杯!
标签: amazon-web-services tensorflow amazon-s3 amazon-ec2 jupyter-notebook