diff --git a/examples/reporting/hyper_parameters.py b/examples/reporting/hyper_parameters.py index 8be4b7cf..b725090b 100644 --- a/examples/reporting/hyper_parameters.py +++ b/examples/reporting/hyper_parameters.py @@ -1,4 +1,9 @@ -# ClearML - example code, ArgumentParser parameter logging and dictionary parameter logging +# ClearML - example code for logging into "CONFIGURATION": +# - ArgumentParser parameter logging +# - user properties logging +# - logging of hyperparameters via dictionary +# - logging of hyperparameters via TaskParameters +# - logging of configuration objects via TaskParameters # from __future__ import absolute_import from __future__ import division @@ -10,7 +15,24 @@ from enum import Enum from clearml import Task +from clearml.task_parameters import TaskParameters, param, percent_param +# Connecting ClearML with the current process, +# from here on everything is logged automatically +task = Task.init(project_name='FirstTrial', task_name='first_trial') + + +# ----------------------------------------------- +# Report user properties +# ----------------------------------------------- + +task.set_user_properties(custom1='great', custom2=True) +task.set_user_properties(custom3=1, custom4=2.0) + + +# ----------------------------------------------- +# Report hyperparameters via dictionary +# ----------------------------------------------- class StringEnumClass(Enum): A = 'a' @@ -22,10 +44,6 @@ class IntEnumClass(Enum): D = 2 -# Connecting ClearML with the current process, -# from here on everything is logged automatically -task = Task.init(project_name='examples', task_name='Hyper-parameters example') - parameters = { 'list': [1, 2, 3], 'dict': {'a': 1, 'b': 2}, @@ -45,6 +63,36 @@ parameters['new_param'] = 'this is new' parameters['float'] = '9.9' print(parameters) + +# ----------------------------------------------- +# Report hyperparameters via TaskParameters +# ----------------------------------------------- + +# Define a class that inherits from TaskParameters. +# Note that TaskParameters inherits from _AttrsMeta; +# because of `iterations` and `target_accuracy` do not need to be explicitly populated in an __init__ method. +# Consult the documentation at https://www.attrs.org for more information. +class MyTaskParameters(TaskParameters): + + iterations = param( + type=int, + desc="Number of iterations to run", + range=(0, 100000), + ) + + target_accuracy = percent_param( + desc="The target accuracy of the model", + ) + + +my_task_parameters = MyTaskParameters(iterations=1000, target_accuracy=0.95) +my_task_parameters = task.connect(my_task_parameters, name='from TaskParameters-like object') + + +# ----------------------------------------------- +# Report configuration objects via dictionary +# ----------------------------------------------- + complex_nested_dict_configuration = { 'list_of_dicts': [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}, {'e': 5, 'f': 6}], 'nested_dicts': {'nested': {'key': 'value', 'extra': 'value'}, 'number': 42},