据我了解,张量y_true
的形状应与y_train
或y_val
相同。但是,当我放入代码
print('my true_tensor shape is', K.int_shape(y_true))
我明白了
my predicted tensor shape is (None, 1)
y_train
的形状为(800, 2)
。 y_train
也是数据库格式,不确定是否重要。两列分别是死亡(1 =是,0 = n0)和生存(以月为单位的时间)。我想保留这两列,因为最终,我将要计算一致性索引。
顺便说一句,我对y_pred
做同样的事情并得到
my true_tensor shape is (None, None)
不确定这是否正确。我的模型的输出应该是每个输入值一个值(对于Cox比例风险模型为log_risk)。
我知道我无法正确地索引y_true
来从死亡列中获取值,但是我不知道自称y_true
张量只有1列而不是2。我也知道我只是将y_true
用于死亡列,并仅使用我的预测(y_pred
)将损失函数最小化。
这是我的损失函数的代码:
from keras import backend as K
# y_pred = prediction of the model (log risk)
# y_true = death "1 is yes and 0 is no"
def avg_partial_likelihood(y_true, y_pred):
print('my true_tensor shape is', K.int_shape(y_true))
print('my predicted tensor shape is', K.int_shape(y_pred))
# hazard ratio
hazard_ratio = K.exp(y_pred)
#log risk
log_risk = K.log(K.sum(hazard_ratio))
#uncensored_likelihood
uncensored_likelihood = y_pred - log_risk
#censored likelihood
print(K.ndim(y_true))
censored_likelihood = uncensored_likelihood * y_true
#num_observed events
num_observed_events = K.sum(y_true)
#neg_likelihood
neg_likelihood = -K.sum(censored_likelihood) / num_observed_events
return neg_likelihood
切线:如果有兴趣,我正在尝试复制https://github.com/jaredleekatzman/DeepSurv/blob/master/deepsurv/deep_surv.py,并试图在def _negative_log_likelihood(self, E, deterministic = False):
下复制其损失函数,他们使用theano。