google-cloud-ml - 腌制的 scipy 稀疏矩阵作为输入数据?

标签 google-cloud-ml

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

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

现在我想在 ML 云上做同样的事情。我的泡菜存储在 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 文件中读取数据?

最佳答案

你说得对,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 data 确实支持稀疏数据(它本质上是一个 map )。请参阅tf.parse_example有关解析 tf.Example 数据的更多信息。

关于google-cloud-ml - 腌制的 scipy 稀疏矩阵作为输入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40133223/

相关文章:

python - gcloud ml-engine IOError : file does not exist

python - 如何使用 tf.contrib.estimator.forward_features

python - 创建版本失败。检测到错误模型,错误为 : "... No module named ' sklearn. impute._base'; 'sklearn.impute' 不是一个包。 (错误代码:0)”

google-cloud-platform - 从 Google Cloud ML Beta 版迁移到 Google Cloud 机器学习引擎

tensorflow - ai-platform : No eval folder or export folder in outputs when running TensorFlow 2. 1个使用Estimators的训练工作

python - 估计器预测无限循环

python - 重新训练 inception 谷歌云陷入全局步骤 0

python-3.x - 部署 Tensorflow 对象检测模型并提供预测

python - Cloud-ml 无法使用tables_initializer 部署模型

python - 错误: 'The replica master 0 ran out-of-memory and exited with a non-zero status of 9(SIGKILL)' at training time