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上存儲文件可能更容易的主要原因。