在Keras中使用多个间接值的自定义损失函数

2024-10-02 16:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个ODE系统中使用Keras神经网络。这是我的模型:

model = Sequential()
model.add(Dense(10, input_dim=3, activation='relu'))
model.add(Dense(1))

这是一个描述微分方程的函数。在常微分方程的计算中使用了Keras模型

def dxdt_new(t, x, *args):
    N, beta, gamma, delta = args
    deltaInfected = beta * x[0] * x[1] / N
    quarantine = model.predict(np.expand_dims(x[:3], axis=0)) / N
    recoveredQ = delta * x[3]
    recoveredNoQ = gamma * x[1]
    S = -deltaInfected
    I = deltaInfected - recoveredNoQ - quarantine
    R = recoveredNoQ + recoveredQ
    Q = quarantine - recoveredQ
    return [S, I, R, Q]

我需要使用一个自定义的损失函数进行训练。在我的损失函数中,我不能使用神经网络预测的值,因为我没有关于它的真实数据。我试图使用受预测值影响的值。所以我不使用y_truey_pred

def my_loss(y_true, y_pred):
    infected = K.constant(INFECTED)
    recovered = K.constant(RECOVERED)
    dead = K.constant(DEAD)
    pred = K.constant(predicted)
    loss = K.sum((K.log(infected) - K.log(pred[1][:] + pred[3][:]))**2)
    loss += K.sum((K.log(recovered + dead) - K.log(pred[2][:]))**2)
    return loss

但当我尝试训练我的神经网络时,我得到以下错误:

ValueError: An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.

所以这个损失函数似乎不能正常工作。如何组织代码以使其正常工作?有没有其他方法来构造损失函数


Tags: 函数模型logmodel神经网络keras损失constant
1条回答
网友
1楼 · 发布于 2024-10-02 16:26:11

I cannot use the values predicted by a neural network since I do not have real data on it

要使定制的loss函数与Backpropagation algorithm一起工作,需要根据y_truey_pred定义它。如果没有这些数据,或者损失函数不可微,则必须使用另一种算法来优化神经网络中的权重。这方面的一些例子可以是Genetic AlgorithmParticle Swarm Optimization

相关问题 更多 >