我正在尝试在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。
答案 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层!