【问题标题】:One hot input to softmax output in keraskeras中softmax输出的一个热输入
【发布时间】:2019-02-25 04:28:44
【问题描述】:

我有一个神经网络,其中一个热 m*n 向量作为输入,行代表类别,列代表位置。

我想训练一个网络在输出层输出另一个具有相同 m*n 形状的(随机)向量,每列的概率总和为 1。这个想法是使用 softmax 最终层,但我是否需要单独构建每一列并连接like here?或者是否可以在 Keras 中更简单地执行此操作(例如单线)?

【问题讨论】:

  • 在最后一层连接n个不同的m个softmax神经元,每列一个

标签: python machine-learning neural-network keras softmax


【解决方案1】:

如果您的模型具有(None, m, n) 的输出形状并且您想计算第二个轴上的softmax,您可以简单地使用softmax 激活方法并将axis 参数传递给它(在您的情况下它必须是axis=1):

from keras import activations

def the_softmax(axis):
    def my_softmax(x):
        return activations.softmax(x, axis=axis)
    return my_softmax

# sequential model
model.add(Dense(..., activation=the_softmax(1)))

# functional model
output = Dense(..., activation=the_softmax(1))(prev_layer_output)

或者,如果您想将其用作独立层,可以使用Lambda 层和后端softmax 函数:

from keras import backend as K

def the_softmax(axis):
    def my_softmax(x):
        return K.softmax(x, axis=axis)
    return my_softmax

# sequential model
model.add(Lambda(the_softmax(1)))

# functional model
output = Lambda(the_softmax(1))(prev_layer_output)

【讨论】:

  • 这很有帮助,谢谢,可以在顺序模型中完成,还是只在函数式api中完成?
  • 但是我不能直接用它作为输出,我得到这个错误:Output tensors to a Model must be Keras tensors。找到:Tensor("truediv_4:0", shape=(?, 5, 2), dtype=float32)
  • @carefullynamed 抱歉,我没有测试我的代码。显然,您需要使用层的activation 参数。现在它可以在顺序模型和函数模型中使用。
  • @carefullynamed 我只是以Dense 为例。无论你使用什么层作为最后一层,都使用这个 softmax 激活函数。
  • @carefullynamed 如果您想将其用作独立层并更改函数以接受任意轴,我刚刚添加了另一个解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2019-03-06
相关资源
最近更新 更多