【发布时间】:2019-06-21 13:44:18
【问题描述】:
我正在尝试在 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。
【问题讨论】:
-
你不能在训练阶段这样做,因为
.argmax不是一个可微的操作。但是,错误告诉您您提供的标签的形状为(num_samples, 3),但Lambda层的输出形状为(num_samples, 1)。 -
@today,这是有道理的,但是 TensorFlow 怎么能做到这一点呢?例如。 here 它在模型定义中显示
argmax层...