Scikit learn MXNetError-数据集不是以有效的幻数开始的

Scikit learn MXNetError-数据集不是以有效的幻数开始的,scikit-learn,protocol-buffers,linear-regression,mxnet,amazon-sagemaker,Scikit Learn,Protocol Buffers,Linear Regression,Mxnet,Amazon Sagemaker,我尝试使用amazon sagemaker线性学习算法,它支持“application/x-recordio-protobuf”的内容类型。在预处理阶段,我使用scikit learn预处理对我的特征进行了一次热编码。然后使用线性学习器估计器记录io转换后的输入数据 我使用了软件包,预处理转换成功 从sagemaker.amazon.common导入写入\u spmatrix\u到\u sparse\u tensor def输出(预测、接受): “”“格式预测输出” 用于串行推断的容器之间的默认

我尝试使用amazon sagemaker线性学习算法,它支持“application/x-recordio-protobuf”的内容类型。在预处理阶段,我使用scikit learn预处理对我的特征进行了一次热编码。然后使用线性学习器估计器记录io转换后的输入数据

我使用了软件包,预处理转换成功

从sagemaker.amazon.common导入写入\u spmatrix\u到\u sparse\u tensor

def输出(预测、接受): “”“格式预测输出” 用于串行推断的容器之间的默认接受/内容类型是JSON。 我们还希望将ContentType或mimetype设置为与accept相同的值,以便下一个 容器可以正确读取响应有效负载。 """ 如果接受==“文本/csv”: return worker.Response(encoders.encode(prediction.todense(),accept),mimetype=accept) elif accept==“应用程序/x-recordio-protobuf”: buf=BytesIO() 将SPU矩阵写入稀疏张量(buf,预测) buf.seek(0) 返回worker.Response(buf,accept,mimetype=accept) 其他: raise RUNTIMERROR(“{}接受类型不受此脚本支持。”.format(接受)) 但是,当线性学习者获取输入记录时,它会失败,错误如下

原因:[15:53:30]/opt/Brazic pkg cache/packages/AIAlgorithmsCppLibs/AIAlgorithmsCppLibs-2.0.774.0/AL2012/generic flavor/src/src/aialgs/io/iterator_base.cpp:100:


(输入错误)数据集中位置810处的MXNet RecordIO记录的标题没有以有效的幻数开头。

我也有类似的问题,但这与我如何将数据保存到S3有关

下面是对我有用的代码:

buffer = io.BytesIO()
smac.write_spmatrix_to_sparse_tensor(buffer, testVectors, testLabels) 
buffer.seek(0)

boto3.client('s3').upload_fileobj(buffer,
                                  Bucket='my-bucket-name',
                                  Key='my-key-name',
                                  ExtraArgs={'ACL': 'bucket-owner-full-control'})

根据Matt的建议,上传到S3也解决了我的问题,有趣的是,这个错误是我的最后一行。这个AWS和其他几个有一个稍微不同的上传格式,我验证过。马特的可能也行

key = 'recordio-pb-data'
boto3.resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'train', key)).upload_fileobj(buf)

我也犯了同样的错误。错误中记录的位置是测试数据集中的最后一条记录

如何修复:删除s3路径中的所有其他文件。您必须将数据保存在一个文件夹中,其中不包含任何其他内容(除了测试和训练)。一旦我删除了其他文件,它就可以正常运行了

(输入错误)位置XX处MXNet RecordIO记录的标头 在数据集中,数据不是以有效的幻数开头


所以我也遇到了类似的问题,但这与我如何将数据保存到S3有关。下面是对我有用的代码:
bucket='my bucket name'buffer=io.BytesIO()smac.write_spmatrix_to_sparse_tensor(buffer,testVectors,testLabels)buffer.seek(0)key='my key name'boto3.client('s3')。upload_fileobj(buffer,bucket=bucket,key=key=key,extrargs={'ACL':'bucket owner full control')) @马特考虑更新为答案。好建议@ MikeF