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

为什么我的TensorFlow Sequential模型输出NaN?请帮忙排查原因

解决TensorFlow模型输出NaN的问题

问题根源

你的代码存在几个关键错误,导致模型输出NaN:

  • 损失函数与指标不匹配:输出层用sigmoid激活,属于二分类任务,但你用了适用于多分类的SparseCategoricalCrossentropy损失和对应指标,且设置了from_logits=True(但输出已经是经过sigmoid的概率,不是logits),这会导致损失计算异常。
  • 样本数据单一:只有1个训练样本且标签全为1,模型没有正负样本对比,无法有效学习,损失计算时容易出现NaN。
  • 无限循环重复训练:While True会无限重复创建模型并训练同一批数据,加重数值不稳定问题。
  • 导入不统一:代码混用tf.keras和keras,可能导致模块引用错误。

修正后的代码

import tensorflow as tf
from tensorflow import keras

# 定义模型
def create_model():
    model = tf.keras.Sequential([
        keras.layers.Dense(30, activation='relu', input_shape=(30,)),
        keras.layers.Dense(12, activation='relu'),
        keras.layers.Dropout(0.2),
        keras.layers.Dense(7, activation='relu'),
        keras.layers.Dense(1, activation='sigmoid')
    ])

    # 二分类任务使用BinaryCrossentropy损失,输出是sigmoid后的概率,from_logits设为False
    model.compile(optimizer='adam',
                  loss=tf.keras.losses.BinaryCrossentropy(from_logits=False),
                  metrics=[tf.keras.metrics.BinaryAccuracy()])

    return model

# 创建模型实例
model = create_model()
model.summary()

# 构造包含正负样本的数据集(示例)
train_labels = [1, 0]
test_labels = [1, 0]

train_images = [
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],
    [30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]
]
test_images = [
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],
    [30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]
]

# 训练模型
model.fit(train_images, 
          train_labels,  
          epochs=10,
          validation_data=(test_images, test_labels),
          verbose=1)  

# 预测
print('predicted:', model.predict(train_images))

关键调整说明

  1. 替换损失与指标:改用BinaryCrossentropy损失和BinaryAccuracy指标,匹配二分类任务,同时from_logits设为False(因为输出层用了sigmoid激活)。
  2. 增加多样本:添加正负样本,让模型有学习的依据,避免损失计算异常。
  3. 移除无限循环:去掉While True,避免重复创建模型和无意义的重复训练。
  4. 统一导入:明确导入tensorflow和keras模块,避免引用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:45:33