2

所以我正在尝试使用tf.contrib.learn.preprocessing.VocabularyProcessor.restore()从 S3 存储桶中恢复词汇文件。首先,我尝试获取要使用的存储桶的路径名,但.restore()我不断收到“对象不存在”错误。之后,经过进一步研究,我发现了一种人们用来加载文本文件和 JSON 文件的方法,并在这里应用了相同的方法:

obj = s3.Object(BUCKET_NAME, KEY).get()['Body'].read()
vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor.restore(obj)

这工作了一段时间,直到文件内容增加并最终出现“文件名太长”错误。有没有更好的方法从 S3 存储桶加载和恢复文件?

顺便说一句,我在我的机器上进行了本地测试,它工作得非常好,因为它只需要获取文件的路径,而不是文件的全部内容。

4

1 回答 1

1

看起来您正在将文件的实际内容作为文件名传递?

我认为您需要将对象从 S3 下载到 tmp 文件并将该文件的路径传递到还原中。

尝试使用这里的方法:http: //boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Object.download_file

更新:我在这里查看了代码:https ://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/learn/python/learn/preprocessing/text.py看起来这只是节省了一个泡菜所以你可以很容易地导入 pickle 并调用以下命令:

import pickle
obj = s3.Object(BUCKET_NAME, KEY).get()['Body']
vocab_processor = pickle.loads(obj.read())

希望这有效吗?

于 2018-03-19T18:53:49.850 回答