keras tensorflow 值错误:没有为任何变量提供梯度:

ctehm74n  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(142)

我尝试做一个自定义的损失函数,但我得到了错误。这应该是cyclegan的文本这是损失函数:

def sloss(ytrue, ypred):
  nump = 0
  print(nump)
  for i in range(len(ypred[0])):
    if int(round(ypred[0][i])) != int(ytrue[0][i]):
      nump+=1
  return(nump)

产品型号:

models = tf.keras.models.Sequential()
models.add(Dense(100, activation='relu'))
models.add(Dense(100, activation='linear'))
models.add(Dense(100, activation='sigmoid'))

models.compile(loss=sloss, optimizer='adam')

models.fit(sx(1,100 np arr), randes(1,100 np arr), epochs=1)
xuo3flqw

xuo3flqw1#

损失函数需要基于ypred计算,否则无法计算梯度。您的损失函数只是多个1的和:

nump += 1
nump += 1
...
nump += 1

这里没有ypred。这就是为什么梯度不能计算和错误信息。另一个问题是你的损失函数在区间上是常数,也就是说,导数在任何地方都是零。优化器不能在梯度为零的情况下工作。

相关问题