【问题标题】:Normalize output without Softmax在没有 Softmax 的情况下标准化输出
【发布时间】:2018-10-29 02:33:23
【问题描述】:

使用softmax 输出层为我的生成神经网络进行训练总体上比使用relu 得到更好的结果,但relu 给了我所需的稀疏性(以像素为单位的零)。 Softmax 还有助于获得标准化输出(即 sum =1.)。

我想做:

outputs = Dense(200, activation='softmax', activity_regularizer=l1(1e-5))(x)
outputs = Activation('relu')(outputs) # to get real zeros
outputs = Activation('softmax')(outputs) # still real zeros, normalized output

但是通过应用连续的 softmax,我会得到极端的输出。有没有我可以使用的层,它只是将输出标准化为 1 (output_i/sum(output)) 而不是 softmax?

【问题讨论】:

    标签: tensorflow neural-network keras


    【解决方案1】:

    你不需要添加两个softmax。就最后一个就好了:

    outputs = Dense(200, activation='relu', activity_regularizer=l1(1e-5))(x)
    outputs = Activation('softmax')(outputs) # still real zeros, normalized 
    

    然而,如果你有更多的中间层并且你希望它们表现得更温和,你可以使用“tanh”而不是 softmax。

    relu 模型的问题通常不完全是“它们的总和不为 1”,而只是“它们的值太高,梯度不能很好地表现”。

    #this combines a max output of 1 (but doesn't care about the sum)
    #yet keeping the sparsity:
    outputs = Dense(200, activation='tanh')(x)
    outputs = Activation('relu')(outputs) # to get real zeros
    
    outputs = Dense(200, activation='relu')(outputs)
    
    #this should only be used at the final layer
    #and only if you really have a classification model with only one correct class
    outputs = Activation('softmax')(outputs) # still real zeros, normalized output
    

    Softmax 倾向于只支持其中一种结果。如果您不想更改结果之间的比较方式,但又想制作sum=1,您可以寻求@nuric 的答案。

    【讨论】:

    • 我需要对我的输出进行标准化,总和正好 = 1。你的建议是一个非常好的建议,可以用 tanh 改进 relu。但不是我要解决的问题。我的模型不是分类,但我需要一个标准化的输出。我可以尝试不使用softmax,而是使用@nuric 建议的单位规范
    • 我明白了 :) --- 即便如此,真正需要 softmax 的唯一层是最后一层。所以你只需要调用一次“softmax”,你的结果就不会那么极端了。
    【解决方案2】:

    您可以编写自己的层来将输出转换为单位范数(即在您的情况下进行归一化),而无需应用 softmax。您可以通过将输出转换为单位向量来实现。大致如下:

    def unitnorm(x):
      return x / (K.epsilon() + K.sqrt(K.sum(K.square(x), keepdims=True)))
    # Wrap Lambda layer
    outputs = Lambda(unitnorm, name='unitnorm')(outputs)
    

    代码来自unit norm constraint,它对内核和层中的偏差执行相同的操作。您可以尝试不使用 epsilon 以更精确,但如果您有很多零,则可能会不太稳定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多