腌制scipy稀疏矩阵作为输入数据?

时间:2016-10-19 13:46:12

标签: google-cloud-ml

我正在研究多类分类问题,包括对简历进行分类。

我使用了sklearn及其TfIdfVectorizer来获取一个大的scipy稀疏矩阵,我在酸洗之后将其输入Tensorflow模型。在我的本地机器上,我加载它,将一小批转换为密集的numpy数组并填充一个feed字典。一切都很好。

现在我想在ML云上做同样的事情。我的pickle存储在gs://my-bucket/path/to/pickle,但是当我运行我的教练时,无法在此URI(IOError: [Errno 2] No such file or directory)找到pickle文件。我正在使用pickle.load(open('gs://my-bucket/path/to/pickle), 'rb')来提取我的数据。我怀疑这不是在GCS上打开文件的好方法,但我对Google Cloud来说是全新的,我无法找到正确的方法。

另外,我读过必须使用TFRecords或CSV格式输入数据,但我不明白为什么我的方法无法工作。由于矩阵的密集表示太大而无法放入内存,因此不包括CSV。 TFRecords可以有效地编码稀疏数据吗?是否可以从pickle文件中读取数据?

1 个答案:

答案 0 :(得分:5)

你是正确的Python"打开"没有开箱即用的GCS工作。鉴于您正在使用TensorFlow,您可以使用file_io库,它既可以使用本地文件,也可以使用GCS上的文件。

from tensorflow.python.lib.io import file_io
pickle.loads(file_io.read_file_to_string('gs://my-bucket/path/to/pickle'))

注意:pickle.load(file_io.FileIO('gs://..', 'r'))似乎不起作用。

欢迎您使用适用于您的任何数据格式,并且不限于CSV或TFRecord(您是否介意指向提出该声明的文档中的位置?)。如果数据适合记忆,那么你的方法是明智的。

如果数据不适合内存,您可能希望使用TensorFlow reader framework,其中最方便的是CSV或TFRecords。 TFRecord只是字节串的容器。最常见的是,它包含序列化的tf.Example数据,它支持稀疏数据(它本质上是一个映射)。有关解析tf.Example数据的详细信息,请参阅tf.parse_example