Настройка количества скрытых слоев в Керасе - PullRequest
0 голосов
/ 14 мая 2019

Я просто пытаюсь исследовать кера и тензор потока с помощью известного набора данных MNIST.Я уже применил некоторые базовые нейронные сети, но когда дело доходит до настройки некоторых гиперпараметров, особенно количества слоев, благодаря оболочке sklearn GridSearchCV, я получаю ошибку ниже:

Parameter values for parameter (hidden_layers) need to be a sequence(but not a string) or np.ndarray.

Чтобы вы могли лучше видеть, я публикую основные части своего кода.

Подготовка данных

# Extract label
X_train=train.drop(labels = ["label"],axis = 1,inplace=False)
Y_train=train['label']
del train

# Reshape to fit MLP
X_train = X_train.values.reshape(X_train.shape[0],784).astype('float32')
X_train = X_train / 255

# Label format
from keras.utils import np_utils
Y_train = keras.utils.to_categorical(Y_train, num_classes = 10)
num_classes = Y_train.shape[1]

Часть Keras

from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV

# Function with hyperparameters to optimize
def create_model(optimizer='adam', activation = 'sigmoid', hidden_layers=2):
  # Initialize the constructor
    model = Sequential()
      # Add an input layer
    model.add(Dense(32, activation=activation, input_shape=784))

    for i in range(hidden_layers):
        # Add one hidden layer
        model.add(Dense(16, activation=activation))

      # Add an output layer 
    model.add(Dense(num_classes, activation='softmax'))
      #compile model
    model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=
     ['accuracy'])
    return model

# Model which will be the input for the GridSearchCV function
modelCV = KerasClassifier(build_fn=create_model, verbose=0)

GridSearchCV

from keras.activations import relu, sigmoid
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.layers import Dropout
from keras.utils import np_utils

activations = [sigmoid, relu]
param_grid = dict(hidden_layers=3,activation=activations, batch_size = [256], epochs=[30])
grid = GridSearchCV(estimator=modelCV, param_grid=param_grid, scoring='accuracy')
grid_result = grid.fit(X_train, Y_train)

Я просто хочу сообщить, что такой же вопрос уже задавался здесь Сетка Поиск по номерускрытых слоев с керасом , но ответ не является полным, и я не могу добавить комментарий к ответу.

Спасибо!

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Вы должны добавить:

for i in range(int(hidden_layers)):
    # Add one hidden layer
    model.add(Dense(16, activation=activation))

Попробуйте добавить значения param_grid в виде списков:

params_grid={"hidden_layers": [3]}
0 голосов
/ 14 мая 2019

Когда вы устанавливаете свой параметр скрытый слой = 2, он выглядит как строка, поэтому выдает ошибку.

В идеале это должна быть последовательность для запуска кода, это то, что говорит ваша ошибка

...