Source code for syne_tune.optimizer.schedulers.searchers.utils.scaling

# Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License").
# You may not use this file except in compliance with the License.
# A copy of the License is located at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
import numpy as np

from syne_tune.config_space import Domain, is_log_space, is_reverse_log_space


[docs] class Scaling:
[docs] def to_internal(self, value: float) -> float: raise NotImplementedError
[docs] def from_internal(self, value: float) -> float: raise NotImplementedError
def __repr__(self): return "{}()".format(self.__class__.__name__) def __eq__(self, other): # For usage in tests. Make sure to edit if parameters are added. return self.__class__ == other.__class__
[docs] class LinearScaling(Scaling):
[docs] def to_internal(self, value: float) -> float: return value
[docs] def from_internal(self, value: float) -> float: return value
[docs] class LogScaling(Scaling):
[docs] def to_internal(self, value: float) -> float: assert value > 0, "Value must be strictly positive to be log-scaled." return np.log(value)
[docs] def from_internal(self, value: float) -> float: return np.exp(value)
[docs] class ReverseLogScaling(Scaling):
[docs] def to_internal(self, value: float) -> float: assert ( 0 <= value < 1 ), "Value must be between 0 (inclusive) and 1 (exclusive) to be reverse-log-scaled." return -np.log(1.0 - value)
[docs] def from_internal(self, value: float) -> float: return 1.0 - np.exp(-value)
[docs] def get_scaling(hp_range: Domain) -> Scaling: if is_log_space(hp_range): return LogScaling() elif is_reverse_log_space(hp_range): return ReverseLogScaling() else: return LinearScaling()