keras - 多类 KerasClassifier 的 GridSearch

标签 keras grid-search hyperparameters multiclass-classification

我正在尝试使用 Keras 进行多类分类的网格搜索。这是代码的一部分:

数据的一些属性如下:

y_
array(['fast', 'immobile', 'immobile', ..., 'slow',
       'immobile', 'slow'],
      dtype='<U17')

y_onehot = pd.get_dummies(y_).values

y_onehot
array([[1, 0, 0],
       [0, 0, 1],
       [0, 0, 1],
    ...
       [0, 1, 0],
       [0, 0, 1],
       [0, 1, 0]], dtype=uint8)

#Do train-test split

y_train.shape
(1904,)

y_train_onehot.shape
(1904, 3)

还有模型...

# Function to create model, required for KerasClassifier
def create_model(optimizer='rmsprop', init='glorot_uniform'):
    # create model
    model = Sequential()
    model.add(Dense(2048, input_dim=X_train.shape[1], kernel_initializer=init, activation='relu'))
    model.add(Dense(512, kernel_initializer=init, activation='relu'))
    model.add(Dense(y_train_onehot.shape[1], kernel_initializer=init, activation='softmax'))
    # Compile model
    model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
    return model

# create model
model = KerasClassifier(build_fn=create_model, verbose=0)

# grid search epochs, batch size and optimizer
optimizers = ['rmsprop', 'adam']
init = ['glorot_uniform', 'normal', 'uniform']
epochs = [50, 100, 150]
batches = [5, 10, 20]

param_grid = dict(optimizer=optimizers, epochs=epochs, batch_size=batches, init=init)
grid = GridSearchCV(estimator=model, param_grid=param_grid, scoring='accuracy')
grid_result = grid.fit(X_train, y_train_onehot)

这是错误:

--> grid_result = grid.fit(X_train, y_train_onehot)
ValueError: Classification metrics can't handle a mix of multilabel-indicator and multiclass targets

该代码适用于二进制模型,但我希望针对多类数据集对其进行修改。请协助。谢谢!

最佳答案

错误出现在softmax层。

我认为你的意思是y_train_onehot.shape[1]而不是y_train_onehot[1]

更新 1: 这很奇怪,但你的第二个问题似乎是 y_train_onehot,你介意尝试两件事吗:

  1. 在 y_train 上尝试不使用 onehot 编码的相同模型。
  2. 如果单独这样做不起作用,请将损失更改为sparse_categorical_crossentropy

还要确保将 y_train_onehot.shape[1] 更改为 softmax 层中的类数

关于keras - 多类 KerasClassifier 的 GridSearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46800129/

相关文章:

c++ - 从 keras 保存 .pb 和 .pbtxt 文件

machine-learning - 如何分解大型网格搜索?

tensorflow - Adam 优化器真的是 RMSprop 加动量吗?如果是,为什么它没有动量参数?

python-2.7 - 我可以通过 Keras 将图像添加到 Tensorboard 吗?

python - 将 tf.contrib.layers.batch_norm 迁移到 Tensorflow 2.0

python scikit 通过核心学习来学习超参数调整

python - 管道、网格搜索和目标转换后返回系数

python - n_jobs=-1 的 GridSearchCV 不适用于决策树/随机森林分类

python - 如何告诉 RandomizedSearchCV 选择分布或 None 值?

python - 如果超参数调整的影响很小,我该如何改进我的 XGBoost 模型?