Skip to content

Commit

Permalink
Fixes in LinearLearner and unit tests addition. (#77)
Browse files Browse the repository at this point in the history
  • Loading branch information
lukmis committed Feb 19, 2018
1 parent 284c712 commit 81531d4
Show file tree
Hide file tree
Showing 3 changed files with 565 additions and 12 deletions.
12 changes: 6 additions & 6 deletions src/sagemaker/amazon/linear_learner.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class LinearLearner(AmazonAlgorithmEstimatorBase):
momentum = hp('momentum', (gt(0), lt(1)), 'A float in (0,1)', float)
learning_rate = hp('learning_rate', (gt(0), lt(1)), 'A float in (0,1)', float)
beta_1 = hp('beta_1', (gt(0), lt(1)), 'A float in (0,1)', float)
beta_2 = hp('beta_1', (gt(0), lt(1)), 'A float in (0,1)', float)
beta_2 = hp('beta_2', (gt(0), lt(1)), 'A float in (0,1)', float)
bias_lr_mult = hp('bias_lr_mult', gt(0), 'A float greater-than 0', float)
bias_wd_mult = hp('bias_wd_mult', gt(0), 'A float greater-than 0', float)
use_lr_scheduler = hp('use_lr_scheduler', (), 'A boolean', bool)
Expand All @@ -62,7 +62,7 @@ class LinearLearner(AmazonAlgorithmEstimatorBase):
normalize_label = hp('normalize_label', (), 'A boolean', bool)
unbias_data = hp('unbias_data', (), 'A boolean', bool)
unbias_label = hp('unbias_label', (), 'A boolean', bool)
num_point_for_scalar = hp('num_point_for_scalar', gt(0), 'An integer greater-than 0', int)
num_point_for_scaler = hp('num_point_for_scaler', gt(0), 'An integer greater-than 0', int)

def __init__(self, role, train_instance_count, train_instance_type, predictor_type='binary_classifier',
binary_classifier_model_selection_criteria=None, target_recall=None, target_precision=None,
Expand All @@ -71,7 +71,7 @@ def __init__(self, role, train_instance_count, train_instance_type, predictor_ty
optimizer=None, loss=None, wd=None, l1=None, momentum=None, learning_rate=None, beta_1=None,
beta_2=None, bias_lr_mult=None, bias_wd_mult=None, use_lr_scheduler=None, lr_scheduler_step=None,
lr_scheduler_factor=None, lr_scheduler_minimum_lr=None, normalize_data=None,
normalize_label=None, unbias_data=None, unbias_label=None, num_point_for_scalar=None, **kwargs):
normalize_label=None, unbias_data=None, unbias_label=None, num_point_for_scaler=None, **kwargs):
"""An :class:`Estimator` for binary classification and regression.
Amazon SageMaker Linear Learner provides a solution for both classification and regression problems, allowing
Expand Down Expand Up @@ -186,14 +186,14 @@ def __init__(self, role, train_instance_count, train_instance_type, predictor_ty
self.normalize_data = normalize_data
self.normalize_label = normalize_label
self.unbias_data = unbias_data
self.ubias_label = unbias_label
self.num_point_for_scaler = num_point_for_scalar
self.unbias_label = unbias_label
self.num_point_for_scaler = num_point_for_scaler

def create_model(self):
"""Return a :class:`~sagemaker.amazon.kmeans.LinearLearnerModel` referencing the latest
s3 model data produced by this Estimator."""

return LinearLearnerModel(self, self.model_data, self.role, self.sagemaker_session)
return LinearLearnerModel(self.model_data, self.role, self.sagemaker_session)

def fit(self, records, mini_batch_size=None, **kwargs):
# mini_batch_size can't be greater than number of records or training job fails
Expand Down
11 changes: 5 additions & 6 deletions tests/integ/test_linear_learner.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def test_linear_learner():
ll = LinearLearner('SageMakerRole', 1, 'ml.c4.2xlarge', base_job_name='test-linear-learner',
sagemaker_session=sagemaker_session)
ll.binary_classifier_model_selection_criteria = 'accuracy'
ll.target_reacall = 0.5
ll.target_recall = 0.5
ll.target_precision = 0.5
ll.positive_example_weight_mult = 0.1
ll.epochs = 1
Expand Down Expand Up @@ -72,14 +72,13 @@ def test_linear_learner():
ll.normalize_label = False
ll.unbias_data = True
ll.unbias_label = False
ll.num_point_for_scala = 10000
ll.num_point_for_scaler = 10000
ll.fit(ll.record_set(train_set[0][:200], train_set[1][:200]))

endpoint_name = name_from_base('linear-learner')
with timeout_and_delete_endpoint_by_name(endpoint_name, sagemaker_session, minutes=20):

model = LinearLearnerModel(ll.model_data, role='SageMakerRole', sagemaker_session=sagemaker_session)
predictor = model.deploy(1, 'ml.c4.xlarge', endpoint_name=endpoint_name)
predictor = ll.deploy(1, 'ml.c4.xlarge', endpoint_name=endpoint_name)

result = predictor.predict(train_set[0][0:100])
assert len(result) == 100
Expand Down Expand Up @@ -110,7 +109,7 @@ def test_async_linear_learner():
ll = LinearLearner('SageMakerRole', 1, 'ml.c4.2xlarge', base_job_name='test-linear-learner',
sagemaker_session=sagemaker_session)
ll.binary_classifier_model_selection_criteria = 'accuracy'
ll.target_reacall = 0.5
ll.target_recall = 0.5
ll.target_precision = 0.5
ll.positive_example_weight_mult = 0.1
ll.epochs = 1
Expand Down Expand Up @@ -138,7 +137,7 @@ def test_async_linear_learner():
ll.normalize_label = False
ll.unbias_data = True
ll.unbias_label = False
ll.num_point_for_scala = 10000
ll.num_point_for_scaler = 10000
ll.fit(ll.record_set(train_set[0][:200], train_set[1][:200]), wait=False)
training_job_name = ll.latest_training_job.name

Expand Down

0 comments on commit 81531d4

Please sign in to comment.