Python Sagemaker从RecordIO到稀疏矩阵

Python Sagemaker从RecordIO到稀疏矩阵,python,numpy,amazon-sagemaker,Python,Numpy,Amazon Sagemaker,在为Sagemaker的分解机实现准备数据进行培训时,我成功地使用函数write_spmatrix_to_sparse_tensor()将我的数据从稀疏矩阵转换为Sagemaker的分解机实现所期望的记录格式 我将导入语句限制为提供的函数的示例: import os import io import boto3 import sagemaker.amazon.common as smac def write_recordio(array, y, prefix, f): # Conver

在为Sagemaker的分解机实现准备数据进行培训时,我成功地使用函数
write_spmatrix_to_sparse_tensor
()将我的数据从稀疏矩阵转换为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)
参数
数组
的一个示例片段,其功能如下:

   (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接收一个
.out
文件,其中有许多类型的输出

示例:

一条记录从
写入\u spmatrix\u到\u sparse\u 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
)文件中的一条记录(其中存在许多记录):


现在我有了一个最初使用
write\u spmatrix\u to\u sparse\u tensor
编写的文件,还有一个来自
transformer.transform
的输出,我想从这些文件返回到我最初的稀疏矩阵格式。本质上,如果函数
write\u sparse\u tensor\u to\u spmatrix
存在,它会是什么样子

一定有更好的办法。但我学到的是从输出文件中读取值。更改数据类型并将其转换为适当的格式。读取值的示例

data.label['score'].float32_tensor.values
数据
这里是输出文件中的一条记录。结果的类型是“google.protobuf.pyext.\u message.RepeatedScalarContainer”,但您可以将其转换为Python列表、NumPy数组或适合您的模型的任何数据类型

data.label['score'].float32_tensor.values