Python keras后端proba到分类

Python keras后端proba到分类,python,keras,backend,Python,Keras,Backend,我正在使用keras后端构建一个自定义度量。第一步是将概率张量(softmax的输出)转换为分类数据 e、 g: 给予 我想得到: array([[ 1, 0, 0], [ 0, 1, 0], [ 0, 0, 1], [ 1, 0, 0]], dtype=float32) 我找到了K.argmax函数,但不知道如何使用它替换张量中的值 max_index = K.cast(K.argmax(y_pred, 1), "int32") lo

我正在使用keras后端构建一个自定义度量。第一步是将概率张量(softmax的输出)转换为分类数据 e、 g:

给予

我想得到:

array([[ 1,  0,  0],
       [ 0,  1,  0],
       [ 0,  0,  1],
       [ 1,  0,  0]], dtype=float32)
我找到了K.argmax函数,但不知道如何使用它替换张量中的值

max_index = K.cast(K.argmax(y_pred, 1), "int32")
lol_index = K.arange(y_pred.shape[0], dtype="int32")
y_pred[index, max_index]
给出:

ValueError: Shape must be rank 1 but is rank 2 for 'strided_slice_32' (op: 'StridedSlice') with input shapes: [4,3], [2,4], [2,4], [2].

好的,经过一些研究,我找到了我的解决方案:

K.one_hot(K.argmax(y_pred), 3)

这里有类似的线索:这已经得到了回答,尽管是针对不同的问题,这里:我说的是keras后端,它与numpy不同。
K.round
有效吗?是的,但仅适用于这种特殊情况。如果你有0.4,0.4,0.2,你会在任何地方得到0。
ValueError: Shape must be rank 1 but is rank 2 for 'strided_slice_32' (op: 'StridedSlice') with input shapes: [4,3], [2,4], [2,4], [2].
K.one_hot(K.argmax(y_pred), 3)