我想知道如何使用Amazon Sagemaker自动调整我的scikit学习随机森林模型。现在,我想调优一个名为"max_depth“的超参数。我将首先转储我的代码,然后表达一些担忧。
文件:notebook.ipynb
estimator = sagemaker.estimator.Estimator(image, role,
train_instance_count=1,
train_instance_type='ml.m4.xlarge',
output_path=output_location,
sagemaker_session=sagemaker_session,
)
hyperparameter_ranges = {'max_depth': IntegerParameter(20, 30)}
objective_metric_name = 'score'
metric_definitions = [{'Name': 'score', 'Regex': 'score: ([0-9\\.]+)'}]
tuner = HyperparameterTuner(estimator,
objective_metric_name,
hyperparameter_ranges,
metric_definitions,
max_jobs=9,
max_parallel_jobs=3)
tuner.fit({'train': train_data_location, 'test': test_data_location})
文件:train
(位于docker容器中)
def train():
with open(param_path, 'r') as tc:
hyperparams = json.load(tc)
print("DEBUG VALUE: ", hyperparams)
data, class = get_data() #abstraction
X, y = train_data.drop(['class'], axis=1), train_data['class']
clf = RandomForestClassifier()
clf.fit(data, class)
print("score: " + str(evaluate_model(clf)) + "\n")
我发现这段代码有两个问题。首先,如果我将一个json对象{'max_value':2}放在名为hyperparameters.json的文件中的必要路径下,则print语句输出{},就好像该文件是空的一样。
问题2是,train()不允许超参数以任何方式、形状或形式影响代码。据我所知,亚马逊没有关于tuner.fit()
方法内部工作原理的文档。这意味着我无法弄清楚train()如何访问要测试的超参数。
任何帮助是感谢,让我知道,如果我可以提供更多的代码或澄清任何事情。
https://stackoverflow.com/questions/51390606
复制