【发布时间】:2020-01-08 19:24:48
【问题描述】:
在为 Sagemaker 的因式分解机实施准备数据以进行训练时,我成功地使用函数 write_spmatrix_to_sparse_tensor (source code) 将我的数据从稀疏矩阵转换为 Sagemaker 的因式分解机实施所需的记录格式。
我将导入语句限制为提供的函数的示例:
import os
import io
import boto3
import sagemaker.amazon.common as smac
def write_recordio(array, y, prefix, f):
# Convert to record protobuf
buf = io.BytesIO()
smac.write_spmatrix_to_sparse_tensor(array=array, file=buf, labels=y)
buf.seek(0)
fname = os.path.join(prefix, f)
boto3.Session().resource('s3').Bucket('bucket_name').Object(fname).upload_fileobj(buf)
参数array 的示例 sn-p 是特征:
(0, 990290) 1.0
(0, 1266265) 1.0
(1, 560338) 1.0
(1, 1266181) 1.0
(2, 182872) 1.0
(2, 1266205) 1.0
...
我的目标是 y 的示例格式:
[1. 1. 1. ... 3. 1. 5.]
write_spmatrix_to_sparse_tensor 使用上述功能和输入按预期工作。训练完我的模型后,我使用 Sagemaker 的 Batch Transform 接收带有许多 <class 'record_pb2.Record'> 类型输出的 .out 文件
例子:
来自write_spmatrix_to_sparse_tensor 输出的一条记录:
features {
key: "values"
value {
float32_tensor {
values: 1.0
values: 1.0
keys: 990290
keys: 1266265
shape: 1266394
}
}
}
label {
key: "values"
value {
float32_tensor {
values: 1.0
}
}
}
批量转换输出 (.out) 文件中的一条记录,其中许多记录存在):
label {
key: "score"
value {
float32_tensor {
values: 1.5246734619140625
}
}
}
所以现在我有一个最初使用 write_spmatrix_to_sparse_tensor 编写的文件和来自 transformer.transform 的输出,我想从这些文件中恢复我原来的稀疏矩阵格式。本质上,如果函数write_sparse_tensor_to_spmatrix 存在,它会是什么样子?
【问题讨论】:
标签: python numpy amazon-sagemaker