我正在构建一个张量流模型,其中输入数据是一个大的scipy稀疏矩阵,每行是一个> 50k的样本,其中只有几百个值不为零.
目前,我将此矩阵存储为pickle,然后将其完全加载到内存中,批量处理并将批处理中的样本转换为我输入模型的密集numpy数组.一旦整个数据适合内存就可以正常工作,但是当我想使用更多数据时,这种方法是不易处理的.
我已经研究过TFRecords作为一种序列化我的数据的方法,并使用tensorflow更有效地读取它,但我找不到任何稀疏数据的例子.
我找到了一个mnist的例子:
writer = tf.python_io.TFRecordWriter("mnist.tfrecords")
# construct the Example protob oject
example = tf.train.Example(
# Example contains a Features proto object
features=tf.train.Features(
# Features contains a map of string to Feature proto objects
feature={
# A Feature contains one of either a int64_list,
# float_list, or bytes_list
'label': tf.train.Feature(
int64_list=tf.train.Int64List(value=[label])),
'image': tf.train.Feature(
int64_list=tf.train.Int64List(value=features.astype("int64"))),
}))
# use the proto object to serialize the example to a string
serialized = example.SerializeToString()
# write the serialized object to disk
writer.write(serialized)
Run Code Online (Sandbox Code Playgroud)
其中labela int和feature np.array的长度为784,表示图像的每个像素为浮点数.我理解这种方法,但我不能真正重现它,因为将我的稀疏矩阵的每一行转换为密集np.array也是难以处理的.
我想我需要为每个功能(列)创建一个键,并为每个示例仅指定非零值,但我不确定是否可以为"缺失"功能指定默认值(在我的情况下为0).
最好的方法是什么?
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |