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

Posted

技术标签:

【中文标题】在 tf.keras 中使用 softmax 作为顺序层和使用 softmax 作为密集层的激活函数有啥区别?【英文标题】:what is the difference between using softmax as a sequential layer in tf.keras and softmax as an activation function for a dense layer?在 tf.keras 中使用 softmax 作为顺序层和使用 softmax 作为密集层的激活函数有什么区别? 【发布时间】:2021-01-13 16:59:50 【问题描述】:

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

tf.keras.layers.Dense(10, activation=tf.nn.softmax)

tf.keras.layers.Softmax(10)

【问题讨论】:

【参考方案1】:

它们是一样的,你可以自己测试一下

# generate data
x = np.random.uniform(0,1, (5,20)).astype('float32')

# 1st option
X = Dense(10, activation=tf.nn.softmax)
A = X(x)

# 2nd option
w,b = X.get_weights()
B = Softmax()(tf.matmul(x,w) + b)

tf.reduce_all(A == B)
# <tf.Tensor: shape=(), dtype=bool, numpy=True>

使用tf.keras.layers.Softmax的时候也要注意,不需要指定单位,很简单的激活方式

默认情况下,softmax 在 -1 轴上计算,如果您的张量输出 > 2D 并且想要在其他维度上操作 softmax,您可以更改此设置。您可以在第二个选项中轻松更改此设置

【讨论】:

以上是关于在 tf.keras 中使用 softmax 作为顺序层和使用 softmax 作为密集层的激活函数有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

tf.kerastf.keras使用tensorflow中定义的optimizer

如何使用 tf.keras 在 RNN 中应用层规范化?

在TF 2.0中使用tf.keras,如何定义依赖于学习阶段的自定义层?

如何在具有使用@tf.keras.utils.register_keras_serializable 注册的自定义函数的 Tensorflow Serving 中提供模型?

在子类 tf.keras.Model 的调用方法中使用 GRUCell 进行 For 循环

如何在 Tensorflow-2.0 中绘制 tf.keras 模型?