我使用Python创建了以下代码,以便使用Optuna优化我的网络。
activations_1 = trial.suggest_categorical('activation', ['relu', 'sigmoid', 'tanh', 'selu']) activations_2 = trial.suggest_categorical('activation', ['relu', 'sigmoid', 'tanh', 'selu']) activations_3 = trial.suggest_categorical('activation', ['relu', 'sigmoid', 'tanh', 'selu']) activations_4 = trial.suggest_categorical('activation', ['relu', 'sigmoid', 'tanh', 'selu'])model = Sequential([ layers.Conv2D(filters=dict_params['num_filters_1'], kernel_size=dict_params['kernel_size_1'], activation=dict_params['activations_1'], strides=dict_params['stride_num_1'], input_shape=self.input_shape), layers.BatchNormalization(), layers.MaxPooling2D(2, 2), layers.Conv2D(filters=dict_params['num_filters_2'], kernel_size=dict_params['kernel_size_2'], activation=dict_params['activations_2'], strides=dict_params['stride_num_2']),
如您所见,我进行了多次激活试验而不是一次,因为我想看看当每一层使用不同的激活函数时,模型是否会产生更好的结果。您可以看到,我对其他参数也做了同样的处理。我的困惑始于返回study.bestparams对象时:
{"num_filters": 32, "kernel_size": 4, "strides": 1, "activation": "selu", "num_dense_nodes": 64, "batch_size": 64}
试验产生的参数中只有一个参数。它没有告诉我参数在哪里使用,也没有显示我使用的其他三个激活函数(或者其他参数)。有没有一种方法可以精确显示我的模型使用的参数以及在哪些层上使用?(我知道可以保存最佳模型和模型摘要,但这对我帮助不大)
回答:
问题在于您对所有激活函数使用了相同的参数名称。不要这样做:
activations_1 = trial.suggest_categorical('activation', ['relu', 'sigmoid', 'tanh', 'selu']) activations_2 = trial.suggest_categorical('activation', ['relu', 'sigmoid', 'tanh', 'selu']) activations_3 = trial.suggest_categorical('activation', ['relu', 'sigmoid', 'tanh', 'selu']) activations_4 = trial.suggest_categorical('activation', ['relu', 'sigmoid', 'tanh', 'selu'])
试试这样:
activations_1 = trial.suggest_categorical('activation1', ['relu', 'sigmoid', 'tanh', 'selu']) activations_2 = trial.suggest_categorical('activation2', ['relu', 'sigmoid', 'tanh', 'selu']) activations_3 = trial.suggest_categorical('activation3', ['relu', 'sigmoid', 'tanh', 'selu']) activations_4 = trial.suggest_categorical('activation4', ['relu', 'sigmoid', 'tanh', 'selu'])