我試圖解決二元分類問題,從Keras
順序模式,必須滿足給定Balanced Error Rate (BER)平衡錯誤率作爲度量函數
所以我認爲這將是使用BER是個好主意而不是作爲度量的準確性。
的BER我的自定義指標的實現看起來是這樣的:
def balanced_error_rate(y_true, y_pred):
labels = theano.shared(np.asmatrix([[0, 1]], dtype='int8'))
label_matrix = K.repeat_elements(labels, K.shape(y_true)[0], axis=1)
true_matrix = K.repeat_elements(y_true, K.shape(labels)[0], axis=1)
pred_matrix = K.repeat_elements(K.round(y_pred), K.shape(labels)[0], axis=1)
class_lens = K.sum(K.equal(label_matrix, true_matrix), axis=1)
return K.sum(K.sum(class_lens - K.sum(K.equal(label_matrix, K.not_equal(true_matrix,pred_matrix)), axis=1), axis=0)/class_lens, axis=0)/2
的想法是從可用標籤創建一個矩陣,並將其與輸入數據(再總結的那些)獲得的數這個標籤的元素....
我的問題是:
> K.shape(y_true)
Shape.0
> Typeinfo:
> type(y_true)
<class 'theano.tensor.var.TensorVariable'>
> type(K.shape(y_true))
<class 'theano.tensor.var.TensorVariable'>
...我無法找出原因。
現在我要找:
一種方式來獲得數組維度/解釋爲什麼shape
行爲像它/爲什麼y_true
看來原因有0
尺寸
或
通過重複給定的行/列向量來創建具有給定高度/高度的張量矩陣的方法。
或
更聰明的溶液用張量函數來計算的BER。
它返回'int'類型的'0'嗎?你能打印類型信息(例如'type(x)')的結果嗎? – nemo
我更新了問題。 –