嗨,我一直在尝试在keras中为dice_error_coefficient创建自定义丢失函数.它有它的实现tensorboard,我尝试使用相同的功能与tensorflow keras但它一直返回NoneType当我用model.train_on_batch或model.fit其中在模型中的指标使用时,它提供正确的价值观.可以请有人帮我解决我该怎么办?我曾经尝试过像ahundt这样的Keras-FCN这样的库,在那里他使用了自定义丢失函数,但似乎都没有.代码中的目标和输出分别是y_true和y_pred,如keras中的losses.py文件中所使用的那样.
def dice_hard_coe(target, output, threshold=0.5, axis=[1,2], smooth=1e-5):
"""References
-----------
- `Wiki-Dice <https://en.wikipedia.org/wiki/Sørensen–Dice_coefficient>`_
"""
output = tf.cast(output > threshold, dtype=tf.float32)
target = tf.cast(target > threshold, dtype=tf.float32)
inse = tf.reduce_sum(tf.multiply(output, target), axis=axis)
l = tf.reduce_sum(output, axis=axis)
r = tf.reduce_sum(target, axis=axis)
hard_dice = (2. * inse + smooth) / (l + r + smooth)
hard_dice = tf.reduce_mean(hard_dice)
return hard_dice
Run Code Online (Sandbox Code Playgroud) 我正在构建一个自定义指标来测量培训期间我的多类数据集中一个类的准确性.我在选择课程时遇到了麻烦.
目标是一个热点(例如:0级标签是[1 0 0 0 0]:
from keras import backend as K
def single_class_accuracy(y_true, y_pred):
idx = bool(y_true[:, 0]) # boolean mask for class 0
class_preds = y_pred[idx]
class_true = y_true[idx]
class_acc = K.mean(K.equal(K.argmax(class_true, axis=-1), K.argmax(class_preds, axis=-1))) # multi-class accuracy
return class_acc
Run Code Online (Sandbox Code Playgroud)
麻烦的是,我们必须使用Keras函数来索引张量.如何为张量创建布尔掩码?谢谢.
我对 Keras 很陌生,我正在尝试定义自己的指标。它计算一致性指数,这是回归问题的衡量标准。
def cindex_score(y_true, y_pred):
sum = 0
pair = 0
for i in range(1, len(y_true)):
for j in range(0, i):
if i is not j:
if(y_true[i] > y_true[j]):
pair +=1
sum += 1* (y_pred[i] > y_pred[j]) + 0.5 * (y_pred[i] == y_pred[j])
if pair is not 0:
return sum/pair
else:
return 0
def baseline_model(hidden_neurons, inputdim):
model = Sequential()
model.add(Dense(hidden_neurons, input_dim=inputdim, init='normal', activation='relu'))
model.add(Dense(hidden_neurons, init='normal', activation='relu'))
model.add(Dense(1, init='normal')) #output layer
model.compile(loss='mean_squared_error', optimizer='adam', metrics=[cindex_score])
return model
def run_model(P_train, Y_train, P_test, …Run Code Online (Sandbox Code Playgroud)