Pickled scipy 稀疏矩阵作为输入数据?
Pickled scipy sparse matrix as input data?
我正在研究包含对简历进行分类的多类分类问题。
我使用 sklearn 及其 TfIdfVectorizer 获得了一个大的 scipy 稀疏矩阵,我在 pickle 后将其输入 Tensorflow 模型。在我的本地机器上,我加载它,将一个小批量转换为密集的 numpy 数组并填充一个 feed 字典。一切都很好。
现在我想在 ML 云上做同样的事情。我的 pickle 存储在 gs://my-bucket/path/to/pickle
,但是当我 运行 我的 trainer 时,无法在此 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 的 "open" 不能直接与 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, the most convenient of which tend to be CSV or TFRecords. TFRecord is simply a container of byte strings. Most commonly, it contains serialized tf.Example data which does support sparse data (it is essentially a map). See tf.parse_example 来获取有关解析 tf.Example 数据的更多信息。
我正在研究包含对简历进行分类的多类分类问题。
我使用 sklearn 及其 TfIdfVectorizer 获得了一个大的 scipy 稀疏矩阵,我在 pickle 后将其输入 Tensorflow 模型。在我的本地机器上,我加载它,将一个小批量转换为密集的 numpy 数组并填充一个 feed 字典。一切都很好。
现在我想在 ML 云上做同样的事情。我的 pickle 存储在 gs://my-bucket/path/to/pickle
,但是当我 运行 我的 trainer 时,无法在此 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 的 "open" 不能直接与 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, the most convenient of which tend to be CSV or TFRecords. TFRecord is simply a container of byte strings. Most commonly, it contains serialized tf.Example data which does support sparse data (it is essentially a map). See tf.parse_example 来获取有关解析 tf.Example 数据的更多信息。