所以我正在尝试使用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存储桶加载和恢复文件?
顺便说一句,我在我的机器上本地测试了它,它工作得非常好,因为它只需要获取文件的路径,而不是文件的全部内容。
答案 0 :(得分: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())
希望这有效吗?