У меня установлены следующие параметры:
parameter_space = {
'hidden_layer_sizes': [(sp_randint.rvs(100,600,1),sp_randint.rvs(100,600,1),), (sp_randint.rvs(100,600,1),)],
'activation': ['tanh', 'relu', 'logistic'],
'solver': ['sgd', 'adam', 'lbfgs'],
'alpha': stats.uniform(0.0001, 0.9),
'learning_rate': ['constant','adaptive']}
Все параметры, кроме hidden_layer_sizes, работают так, как ожидалось.
В настоящее время random
значения hidden_layer_sizes предварительно вычисляются и остаются неизменными во всех итерациях.
Есть ли способ получить 1 или 2 слоя MLP со скрытыми слоями нейронов между 100 и 600, выбранными случайным образом для каждой итерации RandomizedSearchCV
.
Любые идеи/другие связанные советы?
RandomizedSearchCV использует ParameterSampler, который ожидает, что будет выбран случайный rvs()
или объект с атрибутом rvs()
. Вы можете имитировать этот объект
class RandIntMatrix(object):
def __init__(self, low, high, shape=(1)):
self.low = low
self.high = high
self.shape = shape
def rvs(self, random_state=None):
np.random.seed(random_state)
return np.random.randint(self.low, self.high, self.shape)
print (RandIntMatrix(100, 600, 3).rvs()) # [ 506 124 310]