Skip to content

2つ以上の設定を一度に実行する

train_configをリスト形式で書く

train_configは、リスト形式にすることもできます。

config.py として、以下を保存してください。

train_config_1 = {
    'dataset_config': {
        'loader_config': {
            'name': 'iris',
        },
    },
    'model_config': {
        'name': 'SklearnLogisticRegression',
        'init_kwargs': {
            'penalty': 'l2',
        },
        'evaluate_kwargs': {
            'cross_val_iterator': 'KFold@sklearn.model_selection',
            'cross_val_iterator_kwargs': {
                'shuffle': True,
                'random_state': 0,
                'n_splits': 10,
            },
        },
        'model_type': 'multiple_classifier',
    },
    'evaluate_enabled': True,
    'fit_model_enabled': True,
    'dump_result_enabled': True,
}

train_config_2 = {
    'dataset_config': {
        'loader_config': {
            'name': 'iris',
        },
    },
    'model_config': {
        'name': 'SklearnLogisticRegression',
        'init_kwargs': {
            'penalty': 'l1',
        },
        'evaluate_kwargs': {
            'cross_val_iterator': 'KFold@sklearn.model_selection',
            'cross_val_iterator_kwargs': {
                'shuffle': True,
                'random_state': 0,
                'n_splits': 10,
            },
        },
        'model_type': 'multiple_classifier',
    },
    'evaluate_enabled': True,
    'fit_model_enabled': True,
    'dump_result_enabled': True,
}

train_config = [train_config_1, train_config_2]

train_config_1がL2正則化項付きロジスティック回帰のiris分類器、train_config_2がL1正則化項付きロジスティック回帰のiris分類器です。 最後に、train_configtrain_config_1,train_config_2を要素に持つリストにしています。

trainとinspectを実行すると以下のようになります。

$ akebono train
$ akebono inspect

### 実行結果
### trainのログは省略

=== scenario summary .. tag: default ===

------------------------------------------------------------
train_id: 0

accuracy
0.94667 

------------------------------------------------------------
train_id: 1

accuracy
0.96000

train_idは、train_configのインデックス順に自動で振られるidで、各オペレーションを区別するために割り当てられます。

可読性を高める

2つ以上を一度に実行したくなる典型的なユースケースとしてパラメータチューニングがあります。 その場合、config.pyには各設定の差分をわかりやすく書いたほうが可読性は高いでしょう。例えば次のように書きます。

import copy
train_config_template = { 
    'dataset_config': {
        'loader_config': {
            'name': 'iris',
        },  
    },  
    'model_config': {
        'name': 'SklearnLogisticRegression',
        'init_kwargs': {},
        'evaluate_kwargs': {
            'cross_val_iterator': 'KFold@sklearn.model_selection',
            'cross_val_iterator_kwargs': {
                'shuffle': True,
                'random_state': 0,
                'n_splits': 10,
            },  
        },  
        'model_type': 'multiple_classifier',
    },  
    'evaluate_enabled': True,
    'fit_model_enabled': True,
    'dump_result_enabled': True,
}

train_config_1 = copy.deepcopy(train_config_template)
train_config_2 = copy.deepcopy(train_config_template)
train_config_1['model_config']['init_kwargs']['penalty'] = 'l2'
train_config_2['model_config']['init_kwargs']['penalty'] = 'l1'

train_config = [train_config_1, train_config_2]

共通の設定をtrain_config_templateと定義しておき、差分を書き換えるコードになっています。 train_config_1train_config_2に別オブジェクトを参照させるため、copyモジュールを使っている点に注意してください。 train,inspectの実行結果は最初と同じになります。