【问题标题】:Tuning number of hidden layers in Keras调整 Keras 中的隐藏层数
【发布时间】:2019-10-01 05:14:10
【问题描述】:

我只是想用著名的 MNIST 数据集探索 keras 和 tensorflow。 我已经应用了一些基本的神经网络,但是在调整一些超参数时,尤其是层数,感谢 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)

我只是想让您知道Grid Search the number of hidden layers with keras这里已经提出了相同的问题,但答案根本不完整,我无法添加评论以回复回答者。

谢谢!

【问题讨论】:

  • 我设法得到一条不同的错误消息,这意味着我可以通过迭代 enumerate(hidden_​​layers) 来解决与 hidden_​​layers 相关的问题。现在,我只得到“'int' object is not iterable”,这比之前的错误更难解释。

标签: python keras scikit-learn mnist


【解决方案1】:

你应该添加:

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

尝试将 param_grid 的值添加为列表:

params_grid={"hidden_layers": [3]}

【讨论】:

  • 谢谢,但我得到了同样的错误信息。我不确定它来自循环,因为当我单独运行它时,一切都很好。它可能来自 GridSearchCV 函数吗?
  • 你能打印 params_grid 的内容吗?
  • 当然你有:``` {'hidden_​​layers': 3, 'activation': [, ], 'batch_size': [256], 'epochs': [30]}```
  • @Mez13 请不要使用 cmets 空间发布此类内容 - 相应地编辑和更新您的问题
  • 好的。那么我应该在哪里回答 cmets 中提出的问题呢?谢谢。顺便说一句,我最初的问题呢?
【解决方案2】:

当您设置参数 hidden layer =2 时,它会以字符串形式出现,因此会引发错误。

理想情况下,它应该是一个序列来运行你错误所说的代码

【讨论】:

  • 你的意思是默认参数吗?因为在我的 GridSearch 中,我将它设置为 3。无论如何,它为什么将 2 解释为字符串?我该如何克服它?
猜你喜欢
  • 2018-01-25
  • 2018-05-27
  • 2019-01-27
  • 2019-05-19
  • 2020-02-02
  • 2019-01-01
  • 2018-08-17
  • 2017-08-06
  • 1970-01-01
相关资源
最近更新 更多