Я хочу попробовать сегментацию изображений с углубленным изучением с использованием AWS. Мои данные хранятся в Amazon S3, и я хотел бы получить к ним доступ с ноутбука Jupyter, который работает на экземпляре Amazon EC2.
Я планирую использовать Tensorflow для сегментации, поэтому мне показалось целесообразным использовать параметры, предоставляемые самим Tensorflow (https://www.tensorflow.org/deploy/s3), поскольку мне кажется, что в конце я хочу, чтобы мои данные были представлены в формате tf.Dataset. Однако, это не совсем сработало для меня. Я попробовал следующее:
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)]]
Я довольно новичок в tenorflow и только недавно начал опробовать некоторые вещи с AWS, поэтому я надеюсь, что моя ошибка станет очевидной для кого-то с большим опытом. Буду очень признателен за любую помощь или совет! Может быть, это даже неправильный путь, и мне лучше с чем-то вроде boto3 (тоже наткнулся на это, но подумал, что tf будет более подходящим в моем случае) или что-то еще?
P.S. 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
. В чем может быть проблема здесь?