我正在研究包含对简历进行分类的多类分类问题。
我使用 sklearn 及其 TfIdfVectorizer 获得了一个大的 scipy 稀疏矩阵,我在 pickle 之后将其输入到 Tensorflow 模型中。在我的本地机器上,我加载它,将一个小批量转换为密集的 numpy 数组并填充一个 feed 字典。一切都很好。
现在我想在 ML 云上做同样的事情。我的 pickle 存储在 gs://my-bucket/path/to/pickle
但当我运行我的训练器时,无法在此 URI 找到 pickle 文件(IOError:[ Errno 2] 没有那个文件或目录
)。我正在使用 pickle.load(open('gs://my-bucket/path/to/pickle), 'rb')
来提取我的数据。我怀疑这不是在 GCS 上打开文件的好方法,但我是 Google Cloud 的新手,我找不到正确的方法。
此外,我读到必须使用 TFRecords 或 CSV 格式输入数据,但我不明白为什么我的方法不起作用。 CSV 被排除在外,因为矩阵的密集表示太大而无法放入内存。 TFRecords 可以像这样有效地编码稀疏数据吗?是否可以从 pickle 文件中读取数据?
最佳答案
您是正确的,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确实支持稀疏数据的数据(它本质上是一张 map )。参见 tf.parse_example有关解析 tf.Example 数据的更多信息。
关于google-cloud-ml - 腌制的稀疏矩阵作为输入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40133223/