Keras自定义softmax层:基于输入层中的零数据,是否可以将softmax层输出的神经元设置为0?

我有一个神经网络,最后一层有10个输出神经元,使用softmax激活函数。我也确切知道,根据输入值,输出层中的某些神经元应该有0值。因此,我有一个特殊的输入层,包含10个神经元,每个神经元的值要么是0,要么是1。

是否有可能在输入神经元3为0时,强制输出神经元3的值为0?

action_input = Input(shape=(10,), name='action_input')...x = Dense(10,  kernel_initializer = RandomNormal(),bias_initializer = RandomNormal() )(x)x = Activation('softmax')(x)

我知道有一种方法可以在神经网络外部屏蔽输出层的结果,并重新调整所有非零相关输出的形状(以使总和为1)。但我想在网络内部解决这个问题,并在网络训练期间使用它。我应该使用自定义层来实现吗?


回答:

最后,我写出了以下代码:

from keras import backend as Kimport tensorflow as tfdef mask_output2(x):    inp, soft_out = x    # 添加一个非常小的值,以避免所有地方都是0    c = K.constant(0.0000001, dtype='float32', shape=(32, 13))    y = soft_out + c    y = Lambda(lambda x: K.switch(K.equal(x[0],0), x[1], K.zeros_like(x[1])))([inp, soft_out])    y_sum =  K.sum(y, axis=-1)    y_sum_corrected = Lambda(lambda x: K.switch(K.equal(x[0],0), K.ones_like(x[0]), x[0] ))([y_sum])    y_sum_corrected = tf.divide(1,y_sum_corrected)    y = tf.einsum('ij,i->ij', y, y_sum_corrected)    return y

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注