1

我有一个.txt文件,每行包含不同的标签。我使用这个文件来创建一个标签索引查找文件,例如:如何为Cloud ML Engine打包词汇表文件

label_index = tf.contrib.lookup.index_table_from_file(vocabulary_file = 'labels.txt' 

我想知道我应该怎么包装与我的云毫升发动机的词汇文件? packaging suggestions明确说明如何设置.py文件,但我不完全确定应该在哪里放置相关的.txt文件。他们是否应该被托管在引擎可以访问的存储桶(即gs://)中,或者它们能够以某种方式与培训师一起打包?

回答

1

您有多个选项。我认为最直接的方法是将labels.txt存储在GCS位置。

但是,如果您愿意,也可以将文件打包在您的setup.py中。有多种方法可以做到这一点,所以我会引用你的official setuptools documentation

让我走过一个简单的例子:

创建你的训练包下面的目录setup.py(通常称为CloudML引擎的样品中trainer,所以我将继续进行,如果你的代码的结构相同,样品,包括使用trainer作为包装)。以下是基于docs你有一个重要的变化,即package_data参数,而不是include_package_data引用:

from setuptools import find_packages 
from setuptools import setup 

setup(
    name='my_model', 
    version='0.1', 
    install_requires=REQUIRED_PACKAGES, 
    packages=find_packages(), 
    package_data={'trainer': ['labels.txt']}, 
    description='My trainer application package.' 
) 

如果运行python setup.py sdist,你可以看到trainer/labels.txt被复制到压缩包。

然后在你的代码,你可以访问该文件是这样的:

from pkg_resources import Requirement, resource_filename 
resource_filename(Requirement.parse('trainer'),'labels.txt') 

需要注意的是在本地运行这段代码,你将必须安装你的包:python setup.py install [--user]

而这就是我认为在GCS上存储文件可能更容易的主要原因。