经过训练的模型本身只是一个 tar 文件,由模型权重组成,本身没有任何作用。要想让模型有用并获取预测,您需要部署模型。
 
                    在 Amazon SageMaker 中部署模型的方式有两种,具体取决于您希望如何生成推理:
 
                     
                     - 要一次获得一个推理,请使用 Amazon SageMaker 托管服务设置永久性终端节点。
- 要获得整个数据集的推理,请使用 Amazon SageMaker 批量转换。
此实验室同时为您提供两个选项,供您选择最适合您的使用案例的方法。
 
 
                     
                    
                   
                    
                    在使用 Amazon SageMaker 托管服务的情况下,活动的 HTTPs 终端节点位于 Amazon EC2 实例上,您可以将有效负载传递到其中并获得推理。
 
                    当您部署模型时,您将调用 sagemaker.estimator.Estimator 对象的部署方法。当您调用部署方法时,您将指定希望用于托管终端节点的 ML 实例的数量和类型。
 
                    复制并粘贴以下代码,然后选择运行以部署模型。
 
                     
                    
                   
                    
                    部署方法可创建可部署的模型、配置 Amazon SageMaker 托管服务终端节点并启动终端节点来托管模型。
 
                    要对终端节点运行推理,您需要确保输入有效负载以训练模型可以读取的格式进行序列化,且推理输出已反序列化为人类可读的格式。在下面的代码中,您使用 csv_serializer 和 json_deserializer 将 CSV 格式的数据(作为向量)传递到模型中以生成 JSON 输出。
 
                    将以下代码复制并粘贴到代码单元格中,然后选择运行。
 
 
                     
                    
                   
                    
                    接下来,提取训练数据的主题向量,以稍后用于 K-NN 模型中。
 
                    将以下代码复制并粘贴到新的代码单元格中,然后选择运行。
 
 
                     
                    
                   
                   predictions = []
for item in np.array(vectors.todense()):
    np.shape(item)
    results = ntm_predictor.predict(item)
    predictions.append(np.array([prediction['topic_weights'] for prediction in results['predictions']]))
    
predictions = np.array([np.ndarray.flatten(x) for x in predictions])
topicvec = train_labels[newidx]
topicnames = [categories[x] for x in topicvec]
 
                    
                   
                    
                    使用批量转换,您一次可以对一批数据运行推理。Amazon SageMaker 会创建必要的计算基础设施,并在批量作业完成时将其拆除。
 
                    批量转换代码将从主题模型中创建一个 sagemaker.transformer.Transformer 对象。然后,它将调用该对象的转换方法来创建转换作业。当您创建 sagemaker.transformer.Transformer 对象时,您可以指定将用于执行批量转换作业的实例数量和类型,您希望将推理存储到 Amazon S3 中的位置。 
 
                    要将推理作业批量作业运行,请将以下代码复制并粘贴到代码单元格中,然后选择运行。
 
                     
                    
                   
                   np.savetxt('trainvectors.csv',
           vectors.todense(),
           delimiter=',',
           fmt='%i')
batch_prefix = '20newsgroups/batch'
train_s3 = sess.upload_data('trainvectors.csv', 
                            bucket=bucket, 
                            key_prefix='{}/train'.format(batch_prefix))
print(train_s3)
batch_output_path = 's3://{}/{}/test'.format(bucket, batch_prefix)
ntm_transformer = ntm.transformer(instance_count=1,
                                  instance_type ='ml.m4.xlarge',
                                  output_path=batch_output_path
                                 )
ntm_transformer.transform(train_s3, content_type='text/csv', split_type='Line')
ntm_transformer.wait()
 
                    
                   
                    
                    当转换作业完成后,您可以使用以下代码将输出下载回您的本地笔记本实例进行检查。
 
 
                     
                    
                   
                    
                    成功! 模型已将每个文档传送到 NUM_TOPICS 维度训练向量中。您现在可以探索主题模型。