From 7d1cc3bede65a9eaa5f5770510790d1174dcf8ef Mon Sep 17 00:00:00 2001 From: Dan Choi Date: Wed, 10 Jul 2019 15:41:24 -0700 Subject: [PATCH 1/3] change: fix list serialization for 1P algos --- src/sagemaker/amazon/hyperparameter.py | 4 +++- tests/integ/test_kmeans.py | 1 + tests/integ/test_randomcutforest.py | 1 + tests/unit/test_kmeans.py | 2 +- tests/unit/test_randomcutforest.py | 2 +- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/sagemaker/amazon/hyperparameter.py b/src/sagemaker/amazon/hyperparameter.py index 06dc89e45c..8ef0973ddd 100644 --- a/src/sagemaker/amazon/hyperparameter.py +++ b/src/sagemaker/amazon/hyperparameter.py @@ -12,6 +12,8 @@ # language governing permissions and limitations under the License. from __future__ import absolute_import +import json + class Hyperparameter(object): """An algorithm hyperparameter with optional validation. Implemented as a python @@ -67,4 +69,4 @@ def serialize_all(obj): """Return all non-None ``hyperparameter`` values on ``obj`` as a ``dict[str,str].``""" if "_hyperparameters" not in dir(obj): return {} - return {k: str(v) for k, v in obj._hyperparameters.items() if v is not None} + return {k: json.dumps(v) if type(v) is list else str(v) for k, v in obj._hyperparameters.items() if v is not None} diff --git a/tests/integ/test_kmeans.py b/tests/integ/test_kmeans.py index 3323e961cd..5201eec6e2 100644 --- a/tests/integ/test_kmeans.py +++ b/tests/integ/test_kmeans.py @@ -52,6 +52,7 @@ def test_kmeans(sagemaker_session): kmeans.half_life_time_size = 1 kmeans.epochs = 1 kmeans.center_factor = 1 + kmeans.eval_metrics = ["ssd", "msd"] assert kmeans.hyperparameters() == dict( init_method=kmeans.init_method, diff --git a/tests/integ/test_randomcutforest.py b/tests/integ/test_randomcutforest.py index 0c74251fd1..2301cca786 100644 --- a/tests/integ/test_randomcutforest.py +++ b/tests/integ/test_randomcutforest.py @@ -34,6 +34,7 @@ def test_randomcutforest(sagemaker_session): train_instance_type="ml.c4.xlarge", num_trees=50, num_samples_per_tree=20, + eval_metrics=["accuracy", "precision_recall_fscore"], sagemaker_session=sagemaker_session, ) diff --git a/tests/unit/test_kmeans.py b/tests/unit/test_kmeans.py index 156920e787..0389f8c180 100644 --- a/tests/unit/test_kmeans.py +++ b/tests/unit/test_kmeans.py @@ -104,7 +104,7 @@ def test_all_hyperparameters(sagemaker_session): half_life_time_size="0", epochs="10", extra_center_factor="2", - eval_metrics="['msd', 'ssd']", + eval_metrics='["msd", "ssd"]', force_dense="True", ) diff --git a/tests/unit/test_randomcutforest.py b/tests/unit/test_randomcutforest.py index f182969c54..de3fda172c 100644 --- a/tests/unit/test_randomcutforest.py +++ b/tests/unit/test_randomcutforest.py @@ -100,7 +100,7 @@ def test_all_hyperparameters(sagemaker_session): assert randomcutforest.hyperparameters() == dict( num_samples_per_tree=str(NUM_SAMPLES_PER_TREE), num_trees=str(NUM_TREES), - eval_metrics="{}".format(EVAL_METRICS), + eval_metrics='["accuracy", "precision_recall_fscore"]', ) From b2f2ab9b7ce413e5965aaeedb9885ee692b40d28 Mon Sep 17 00:00:00 2001 From: Dan Choi Date: Wed, 10 Jul 2019 16:00:28 -0700 Subject: [PATCH 2/3] fix styling --- src/sagemaker/amazon/hyperparameter.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sagemaker/amazon/hyperparameter.py b/src/sagemaker/amazon/hyperparameter.py index 8ef0973ddd..3642db5898 100644 --- a/src/sagemaker/amazon/hyperparameter.py +++ b/src/sagemaker/amazon/hyperparameter.py @@ -69,4 +69,8 @@ def serialize_all(obj): """Return all non-None ``hyperparameter`` values on ``obj`` as a ``dict[str,str].``""" if "_hyperparameters" not in dir(obj): return {} - return {k: json.dumps(v) if type(v) is list else str(v) for k, v in obj._hyperparameters.items() if v is not None} + return { + k: json.dumps(v) if type(v) is list else str(v) + for k, v in obj._hyperparameters.items() + if v is not None + } From 167ac3b3a9a4011ab38e7ac9f3dd3b969d5c0ff0 Mon Sep 17 00:00:00 2001 From: Dan Choi Date: Thu, 11 Jul 2019 13:42:20 -0700 Subject: [PATCH 3/3] fix pylint and integ test --- src/sagemaker/amazon/hyperparameter.py | 2 +- tests/integ/test_kmeans.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sagemaker/amazon/hyperparameter.py b/src/sagemaker/amazon/hyperparameter.py index 3642db5898..15ae928810 100644 --- a/src/sagemaker/amazon/hyperparameter.py +++ b/src/sagemaker/amazon/hyperparameter.py @@ -70,7 +70,7 @@ def serialize_all(obj): if "_hyperparameters" not in dir(obj): return {} return { - k: json.dumps(v) if type(v) is list else str(v) + k: json.dumps(v) if isinstance(v, list) else str(v) for k, v in obj._hyperparameters.items() if v is not None } diff --git a/tests/integ/test_kmeans.py b/tests/integ/test_kmeans.py index 5201eec6e2..65f2854179 100644 --- a/tests/integ/test_kmeans.py +++ b/tests/integ/test_kmeans.py @@ -13,6 +13,7 @@ from __future__ import absolute_import import gzip +import json import os import pickle import sys @@ -64,6 +65,7 @@ def test_kmeans(sagemaker_session): epochs=str(kmeans.epochs), extra_center_factor=str(kmeans.center_factor), k=str(kmeans.k), + eval_metrics=json.dumps(kmeans.eval_metrics), force_dense="True", )