【问题标题】:Gini coefficient with keras in pythonpython中使用keras的基尼系数
【发布时间】:2017-11-16 21:37:08
【问题描述】:

我想计算以基尼系数作为优化函数的简单神经网络模型。这是我的 gini 函数:

def gini(actual, pred):
    nT = K.shape(actual)[-1]
    n = K.cast(nT, dtype='int32')
    inds = K.reverse(tf.nn.top_k(pred, n)[1], axes=[0])
    a_s = K.gather(actual, inds)
    a_c = K.cumsum(a_s)
    n = K.cast(nT, dtype=K.floatx())
    giniSum = K.cast(K.sum(a_c) / K.sum(a_s), dtype=K.floatx()) - (n + 1) / 2.0

    return giniSum / n


def gini_normalized(a, p):
    return gini(a, p) / gini(a, a)

这就是我编译模型的方式:

model = Sequential()
    model.add(Dense(32, input_shape=(60,)))
    model.add(Activation('relu'))
    model.add(Dense(2, activation='softmax'))

    sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
    model.compile(loss=gini_normalized, optimizer=sgd)

    return model

我总是收到这个错误“ValueError: None values not supported.”,谁能告诉我我的错误是什么?

【问题讨论】:

    标签: tensorflow neural-network keras gini


    【解决方案1】:

    此错误对于不可微分的函数是典型的。 (当某些 var 是 None 并且不应该是时也会发生这种情况。有时有人忘记将 return 语句添加到某个地方的自定义函数或类似的东西)。

    在你的情况下,它确实是不可区分的。

    所有最终值都仅来自actual,而actual 是不变的。 (你的模型不能用这样的功能训练)

    var pred 是与模型权重相关联的变量,但 pred 在函数中的唯一部分是对 actual 中的值进行排序。但是排序不是一个可微分的动作。

    您可能对此无能为力,因为您的 Gini 函数确实应该像您一样从 actual 获取值。

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      相关资源
      最近更新 更多