在 Keras 层中使用 softmax 激活时如何指定轴?

Posted

技术标签:

【中文标题】在 Keras 层中使用 softmax 激活时如何指定轴?【英文标题】:How to specify the axis when using the softmax activation in a Keras layer? 【发布时间】:2018-02-07 09:11:14 【问题描述】:

softmax 激活的 Keras docs 声明我可以指定激活应用于哪个轴。我的模型应该通过 k 矩阵 M 输出一个 n,其中 Mij第 i 个字母是符号 j

n = 7 # number of symbols in the ouput string (fixed)
k = len("0123456789") # the number of possible symbols

model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=((N,))))
...
model.add(layers.Dense(n * k, activation=None))
model.add(layers.Reshape((n, k)))

model.add(layers.Dense(output_dim=n, activation='softmax(x, axis=1)'))

最后一行代码无法编译,因为我不知道如何正确指定 softmax 激活的轴(在我的例子中是 k 的轴)。

【问题讨论】:

【参考方案1】:

您必须在此处使用实际函数,而不是字符串。

为了方便起见,Keras 允许您使用一些字符串。

激活函数可以在keras.activations 中找到,它们在the help file 中列出。

from keras.activations import softmax

def softMaxAxis1(x):
    return softmax(x,axis=1)

..... 
......
model.add(layers.Dense(output_dim=n, activation=softMaxAxis1))

甚至是自定义轴:

def softMaxAxis(axis):
    def soft(x):
        return softmax(x,axis=axis)
    return soft

...
model.add(layers.Dense(output_dim=n, activation=softMaxAxis(1)))

【讨论】:

执行此操作后出现错误“softmax() got an unexpected keyword argument 'axis'”。 嗯...也许您需要更新的 keras/tensorflow 版本...您也可以结合Permute 层将所需的轴移动到最后,使用softmax 和另一个@987654327 @ 恢复旧位置。 或者你可以直接从backend获取softmax而不是activations

以上是关于在 Keras 层中使用 softmax 激活时如何指定轴?的主要内容,如果未能解决你的问题,请参考以下文章

Softmax MLP 分类器 - 在隐藏层中使用哪个激活函数?

深度学习Keras框架笔记之激活函数详解

在 tf.keras 中使用 softmax 作为顺序层和使用 softmax 作为密集层的激活函数有啥区别?

Keras softmax 激活,category_crossentropy 损失。但输出不是 0, 1

有人可以向我解释初始化 keras lstm 层中传递的激活参数和循环激活参数之间的区别吗?

如何在 Keras 中的预训练 InceptionResNetV2 模型的不同层中找到激活的形状 - Tensorflow 2.0