You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow 2迁移DispNet时遇No loss found错误的解决求助

DispNet迁移TensorFlow 2.x时"No loss found"报错解决

问题背景

原本使用TensorFlow 1.2实现完整DispNet网络,迁移至TensorFlow 2.10环境,基于TensorFlow 2.12 API编写模型代码如下:

import tensorflow as tf
from tensorflow import keras

layer = tf.keras.layers

conv1 = layer.Conv2D(filters=64, kernel_size=(7, 7), strides=(1, 1), padding="SAME", activation="relu", name="conv1")(input)

max_pool1 = layer.MaxPool2D(pool_size=(2, 2), strides=(2, 2), padding="SAME", name="max_pool1")(conv1)

......

layers...

......

cat1 = tf.keras.layers.Concatenate(axis=3)([upconv1, max_pool1])
iconv1 = layer.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding="SAME", activation="relu", name="iconv1")(cat1)


model = keras.Model(inputs=input, outputs=iconv1, name="Dispnet_Simple")
model.compile(optimizer='adam', loss=tf.keras.losses.MeanSquaredError, metrics=['accuracy'])
output = []

model.fit(x=combine_image, y=output, batch_size=BATCH_SIZE, epochs=2)

报错信息

运行后触发如下错误:

Traceback (most recent call last):
    "C:\Users\SUPERJ~1\AppData\Local\Temp\__autograph_generated_filedo1_ym8c.py", line 15, in tf__train_function
    retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
ValueError: in user code:

    File "C:\ProgramData\Anaconda3\envs\pytorch\lib\site-packages\keras\engine\training.py", line 1160, in train_function  *
        return step_function(self, iterator)
    File "C:\ProgramData\Anaconda3\envs\pytorch\lib\site-packages\keras\engine\training.py", line 1146, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "C:\ProgramData\Anaconda3\envs\pytorch\lib\site-packages\keras\engine\training.py", line 1135, in run_step  **
        outputs = model.train_step(data)
    File "C:\ProgramData\Anaconda3\envs\pytorch\lib\site-packages\keras\engine\training.py", line 995, in train_step
        self._validate_target_and_loss(y, loss)
    File "C:\ProgramData\Anaconda3\envs\pytorch\lib\site-packages\keras\engine\training.py", line 959, in _validate_target_and_loss
        raise ValueError(


ValueError: No loss found. You may have forgotten to provide a `loss` argument in the `compile()` method.

解决方法

1. 修正loss参数传入方式

代码中loss=tf.keras.losses.MeanSquaredError是传入损失类的引用,而非可调用的实例或字符串别名,TensorFlow无法识别为有效损失函数。两种正确写法:

  • 使用字符串别名:
    model.compile(optimizer='adam', loss='mse', metrics=[tf.keras.metrics.MeanAbsoluteError(name='mae')])
    
  • 实例化损失类:
    model.compile(optimizer='adam', loss=tf.keras.losses.MeanSquaredError(), metrics=[tf.keras.metrics.MeanAbsoluteError(name='mae')])
    

2. 替换无效的训练目标数据

代码中output = []是空列表,无法作为回归任务的标签数据,必须传入与combine_image维度匹配的真实视差标签数据,比如:

# 假设real_disparity_labels是预处理后的真实视差标签,维度与模型输出一致
model.fit(x=combine_image, y=real_disparity_labels, batch_size=BATCH_SIZE, epochs=2)

3. 更换适配的评估指标

DispNet是视差回归任务,accuracy是分类任务指标,完全不适用于回归场景,建议替换为回归类指标,比如平均绝对误差(MAE)、均方根误差(RMSE)等。

内容的提问来源于stack exchange,提问作者Superjiang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:32:37