2017-11-29 3 views
1

내가 keras 함께 일하고 있어요 그리고 난이 keras 추상적 인 백엔드를 사용하여 categorical_crossentropy를 다시 작성하기 위해 노력하고있어,하지만 난Keras Cross_entropy

이 내 실제 사용자 정의 기능, 난 crossentropy 단지 가중 합을 원하는됩니다 붙어

def custom_entropy(y_true, y_pred): 
    y_pred /= K.sum(y_pred, axis=-1, keepdims=True) 

    # clip to prevent NaN's and Inf's 
    y_pred = K.clip(y_pred, K.epsilon(), 1 - K.epsilon()) 

    loss = y_true * K.log(y_pred) 
    loss = -K.sum(loss, -1) 

    return loss 

내 프로그램에서 나는 model.predict() 덕분에 label_pred를 생성합니다. 마침내 내가 수행

label_pred = model.predict(mfsc_train[:,:,5]) 
    cc = custom_entropy(label, label_pred) 
    ce = K.categorical_crossentropy(label, label_pred) 

나는 다음과 같은 오류 얻을 다음 documentation에 주어진

Traceback (most recent call last): 
    File "SAMME_train_all.py", line 47, in <module> 
    ce = K.categorical_crossentropy(label, label_pred) 
    File "C:\Users\gionata\AppData\Local\Programs\Python\Python36\lib 
s\keras\backend\tensorflow_backend.py", line 2754, in categorical_c 
    axis=len(output.get_shape()) - 1, 
AttributeError: 'numpy.ndarray' object has no attribute 'get_shape' 
+0

대신 계산 방법을 알려주시겠습니까? –

+0

나는 내 custom_loss와 함께 이전의 messagge를 편집했습니다. 동일한 매개 변수 (및 prob = np.ones())를 사용하여 두 가지를 모두 테스트하려고했으나 기본적인 교차 도와 사용하면 오류가 발생합니다. no getShape –

답변

2

Keras 백엔드 기능 K.categorical_crossentropy은 텐서를 예상합니다.

답변에서 어떤 유형이인지 분명하지 않습니다. 그러나 model.predict은 항상 NumPy ndarrays을 반환하므로 label_pred은 텐서가 아닙니다. 전환하기 쉽습니다 (예 : 이것의 반환 텐서이기 때문에 당신은 단지로 model을 사용할 수 있습니다, 실제로 그것을 평가하기 위해, 당신은 또한

K.eval(custom_entropy(label, K.constant(label_pred))) 

를 호출 것,

custom_entropy(label, K.constant(label_pred)) 

(label을 가정하는 것은 이미 텐서) 영업 이익, 지금 즉, 다른 tenser에서 텐서 결과에 label_pred, ccce

label_pred = model(K.constant(mfsc_train[:,:,5])) 
cc = custom_entropy(label, label_pred) 
ce = K.categorical_crossentropy(label, label_pred) 

그것을 것입니다 호출 모두는 텐서 (tensors)이다.

1

, 인수는 텐서 :

y_true: True labels. TensorFlow/Theano tensor. 
y_pred: Predictions. TensorFlow/Theano tensor of the same shape as y_true. 

가 그것을 해결해야 텐서에 NumPy와 배열을 변환 .