如何为逻辑回归超参调优配置ConditionalParameterSpec关联penalty与solver
解决方案:配置Google Cloud AI Platform超参调优的条件参数
要实现当penalty为l2时固定solver为sag,penalty为l1时固定solver为saga,需要使用ConditionalParameterSpec定义参数间的依赖关系。以下是修改后的完整代码:
from google.cloud.aiplatform import hyperparameter_tuning as hpt import google.cloud.aiplatform as aiplatform worker_pool_specs = [ { "machine_spec": { "machine_type": "n1-standard-4", "accelerator_type": "NVIDIA_TESLA_K80", "accelerator_count": 1, }, "replica_count": 1, "container_spec": { "image_uri": container_image_uri, "command": [], "args": [], }, } ] custom_job = aiplatform.CustomJob( display_name='my_job', worker_pool_specs=worker_pool_specs, labels={'my_key': 'my_value'}, ) hp_job = aiplatform.HyperparameterTuningJob( display_name='hp-test', custom_job=custom_job, # 修正原代码中的变量名错误 metric_spec={ 'loss': 'minimize', }, parameter_spec={ 'C': hpt.DoubleParameterSpec(min=0.001, max=0.1, scale='log'), 'max_iter': hpt.IntegerParameterSpec(min=4, max=128, scale='linear'), 'penalty': hpt.CategoricalParameterSpec(values=['l1', 'l2']), # 用ConditionalParameterSpec定义solver的条件依赖 'solver': hpt.ConditionalParameterSpec( conditions=[ # penalty为l2时,solver固定为sag hpt.ConditionSpec( parent_parameter='penalty', parent_values=['l2'], parameter_spec={ 'solver': hpt.CategoricalParameterSpec(values=['sag']) } ), # penalty为l1时,solver固定为saga hpt.ConditionSpec( parent_parameter='penalty', parent_values=['l1'], parameter_spec={ 'solver': hpt.CategoricalParameterSpec(values=['saga']) } ) ], # 默认参数(因penalty仅含l1/l2,此配置可选) default_parameter_spec={ 'solver': hpt.CategoricalParameterSpec(values=['sag']) } ) }, max_trial_count=128, parallel_trial_count=8, labels={'my_key': 'my_value'}, ) hp_job.run() print(hp_job.trials)
关键修改说明:
- 移除原代码中独立的
solver参数定义,替换为ConditionalParameterSpec - 通过两个
ConditionSpec分别绑定参数关系:- 当
penalty取l2时,solver仅允许sag这一个值 - 当
penalty取l1时,solver仅允许saga这一个值
- 当
- 修正原代码中
custom_job=job的变量名错误,改为custom_job=custom_job
配置完成后,超参调优作业会自动根据penalty的取值匹配对应的solver值,不会出现参数不匹配的组合。
内容的提问来源于stack exchange,提问作者Revanth P S
相关产品推荐
相关产品推荐

