Keras通过argmax输出单个值

时间:2019-06-21 13:44:18

标签: python keras

我正在尝试在Keras中建立一个非常简单的神经网络:

model = Sequential()
model.add(Dense(40, input_dim=186, activation='relu', name='x'))
model.add(Dense(3, activation='softmax'))

这有效,并输出三维矢量(例​​如0 1 0)。我想添加一个使用argmax来发送单个值而不是此向量的层。

我认为这可以工作:

model.add(Lambda(lambda x: K.cast(K.argmax(x), dtype='float32')))

但这会抛出(5962是训练样本的数量):

ValueError: Error when checking target: expected lambda_1 to have 1 dimensions, but got array with shape (5962, 3)

我将如何实现?

请注意,我希望在模型中将此作为实际的ArgMax层,类似于TensorFlow's ArgMax

1 个答案:

答案 0 :(得分:0)

感谢@today为我指出正确的方向。您应该在训练后添加 层,一切都很好:

model = Sequential()
model.add(Dense(40, input_dim=186, activation='relu', name='x'))
model.add(Dense(classes, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=50, epochs=100, validation_data=(X_test, Y_test))
model.add(Lambda(lambda x: K.cast(K.argmax(x), dtype='float32'), name='y_pred'))
model.save('data/trained.h5')

现在这将在模型中添加ArgMax层!