2017-11-01 11 views
0

オプティマイザ機能としてジニ係数を持つ単純なNNモデルを計算したいと思います。 、誰も私に何を伝えることができます:「なし値はサポートされません。ValueErrorを」:Pythonでケラを持つジニ係数

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 

私はいつもこのエラーが取得ここに私のジニ機能です私の間違いですか?

答えて

0

このエラーは、微分できない関数では一般的です。 (ある種のvarがNoneであってもいけません。たぶん、ある人がreturnステートメントをどこかのカスタム関数に追加するのを忘れてしまった場合です)。

あなたのケースでは、それは確かに区別できません。

すべての最終値は、actualからのみであり、actualは、一定である。

VAR predがモデルの重みに接続されているものである(あなたのモデルは、このような機能を用いて訓練することはできません)が、predその一部のみがactualで値をソートされた機能に取っています。しかし、ソーティングは区別できるアクションではありません。

Gini関数は実際にはactualの値を取るべきなので、おそらく何もできません。

関連する問題