Neural network 最大化keras LSTM中的最后一层

Neural network 最大化keras LSTM中的最后一层,neural-network,keras,lstm,keras-layer,softmax,Neural Network,Keras,Lstm,Keras Layer,Softmax,这个问题可能与特定的应用程序有关,但我被阻止了,我认为这是一个好问题。 假设我们在Keras中有一个LSTM,它是序列对序列,例如词性标记。最后一层给出了标签序列和每个标签的概率。考虑以下预测输出; A = [[0.1, 0.3, 0.2, 0.4],[0.2, 0.2, 0.2, 0.4],[0.5, 0.2, 0.1, 0.1]] 基本上,这是一个长度为3的序列,在序列的每个时间点有4个可能的标记 现在我想做的是把这个序列改成下面的 A' = [[0, 0, 0, 1],[0, 0, 0,

这个问题可能与特定的应用程序有关,但我被阻止了,我认为这是一个好问题。 假设我们在Keras中有一个LSTM,它是序列对序列,例如词性标记。最后一层给出了标签序列和每个标签的概率。考虑以下预测输出;
A = [[0.1, 0.3, 0.2, 0.4],[0.2, 0.2, 0.2, 0.4],[0.5, 0.2, 0.1, 0.1]]
基本上,这是一个长度为3的序列,在序列的每个时间点有4个可能的标记

现在我想做的是把这个序列改成下面的

A' = [[0, 0, 0, 1],[0, 0, 0, 1],[1, 0, 0, 0]]

换句话说,我想把一个放在最大概率的位置,把所有其他的都改为0。非常感谢您的帮助。

您可以使用此稍加修改的采样功能:

def set_max_to_one(preds, temperature=0.01):
    preds = np.log(preds) / temperature
    exp_preds = np.exp(preds)
    preds = exp_preds.T / np.sum(exp_preds, axis=1)
    return preds.astype("int16").T
这将返回您期望的结果。您可以随意调整温度,使其稳定且不返回NA,但使用0.01应该足够了。您可能还需要更改输出数组的类型

请注意,如果使用numpy数组对象,这将起作用;如果要将其用于keras张量,则需要对其进行修改(例如,考虑批量大小)。希望这有帮助

编辑:

这应该适用于keras:

import keras.backend as K

def set_max_to_one(x, temperature=0.01):
    x = K.log(x)/temperature
    return K.round(K.softmax(x))
如果要设置轴的值,可以使用
layers.core.Activation()
代替
backend.softmax()


请注意,输出仍然是float的张量,而不是int的张量,但我不知道如何更改张量类型。它应该不会有太大区别。

您可以使用这个稍加修改的采样函数版本:

def set_max_to_one(preds, temperature=0.01):
    preds = np.log(preds) / temperature
    exp_preds = np.exp(preds)
    preds = exp_preds.T / np.sum(exp_preds, axis=1)
    return preds.astype("int16").T
这将返回您期望的结果。您可以随意调整温度,使其稳定且不返回NA,但使用0.01应该足够了。您可能还需要更改输出数组的类型

请注意,如果使用numpy数组对象,这将起作用;如果要将其用于keras张量,则需要对其进行修改(例如,考虑批量大小)。希望这有帮助

编辑:

这应该适用于keras:

import keras.backend as K

def set_max_to_one(x, temperature=0.01):
    x = K.log(x)/temperature
    return K.round(K.softmax(x))
如果要设置轴的值,可以使用
layers.core.Activation()
代替
backend.softmax()


请注意,输出仍然是float的张量,而不是int的张量,但我不知道如何更改张量类型。这应该没什么区别。

谢谢@gionni,是的,我正在寻找tensor版本的实现,因为我是在Keras中实现的。我觉得一旦在Keras中完成,它就会成为图表的一部分。谢谢@gionni,是的,我正在寻找tensor版本的实现,因为我在Keras中做这件事。我觉得一旦在Keras中完成,它就会成为图表的一部分。