LDA 的 SageMaker 超参数调整,澄清 feature_dim

SageMaker Hyperparameter Tuning for LDA, clarifying feature_dim

我正在尝试使用 mxnet 在 SageMaker 笔记本中的 LDA 模型的 Estimator 上 运行 HyperparameterTuner,但 运行 遇到与 feature_dim 超参数相关的错误我的代码。我相信这与训练和测试数据集的不同维度有关,但我不能 100% 确定是否是这种情况或如何解决它。

估算器代码

[请注意,我将 feature_dim 设置为训练数据集的维度]

vocabulary_size = doc_term_matrix_train.shape[1]

lda = sagemaker.estimator.Estimator(
        container,
        role,
        output_path="s3://{}/{}/output".format(bucket, prefix),
        train_instance_count=1,
        train_instance_type="ml.c4.2xlarge",
        sagemaker_session=session
        )

lda.set_hyperparameters(
    mini_batch_size=40
    feature_dim=vocabulary_size,
    )

超参数调整作业

#s3_input_train and s3_input_test hold doc_term matrices of the test/train corpus 

s3_input_train = 's3://{}/{}/train'.format(bucket, prefix)
s3_input_test ='s3://{}/{}/test/'.format(bucket, prefix)
data_channels = {'train': s3_input_train, 'test': s3_input_test}

hyperparameter_ranges = {
    "alpha0": ContinuousParameter(0.1, 1.5, scaling_type="Logarithmic"),
    "num_topics":IntegerParameter(3, 10)}

# Configure HyperparameterTuner
my_tuner = HyperparameterTuner(estimator=lda,  
                               objective_metric_name='test:pwll',
                               hyperparameter_ranges=hyperparameter_ranges,
                               max_jobs=5,
                               max_parallel_jobs=2)

# Start hyperparameter tuning job
my_tuner.fit(data_channels, job_name='run-3', include_cls_metadata=False)

Cloudwatch 日志

当我 运行 以上操作时,调优失败,当我查看 Cloudwatch 以查看日志时,错误通常是:

[01/19/2022 19:42:22 错误 140234465695552] 算法错误:索引 11873 超出尺寸为 11873 的轴 1 的范围(由 IndexError 引起)

我复制了上面的内容,因为 11873 是我的测试数据集中的特征数量,所以我认为存在联系,但我不确定到底发生了什么。当我尝试将“11873”作为 feature_dim 的值时,错误提示数据具有 32465 个特征(对应于训练集)。将这两个值相加也会出现以下错误:

[01/20/2022 13:44:01 错误 140125082621760] 客户错误:提供的 feature_dim 参数与数据的维度不同。 (feature_dim) 44338 != 32465 (数据).

最后,Cloudwatch 中的最后一个日志报告了以下内容,表明“所有数据”正在被放入具有测试数据维度的矩阵中:

[01/20/2022 14:49:52 INFO 140411440904000] 将所有数据加载到形状为 (11, 11873)

的矩阵中

如何定义 feature_dim 给定的测试和训练数据集?

我已经解决了这个问题。我的问题是,在将数据转换为 doc-term 矩阵之前,我将数据拆分为测试和训练,这导致了不同维度的测试和训练数据集,这使 SageMaker 的算法失效。一旦我将所有输入数据转换为 doc-term 矩阵,然后将其拆分为测试和训练,超参数优化操作就完成了。