在 Keras 层中使用 softmax 激活时如何指定轴?
How to specify the axis when using the softmax activation in a Keras layer?
用于 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
的轴)。
您必须在那里使用实际函数,而不是字符串。
为了方便起见,Keras 允许您使用一些字符串。
可以在 keras.activations, and they're listed in 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 激活的 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
的轴)。
您必须在那里使用实际函数,而不是字符串。
为了方便起见,Keras 允许您使用一些字符串。
可以在 keras.activations, and they're listed in 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)))