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 矩阵,然后将其拆分为测试和训练,超参数优化操作就完成了。
我正在尝试使用 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 矩阵,然后将其拆分为测试和训练,超参数优化操作就完成了。