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

ResNet时间序列预测模型始终输出预测值1.0,应如何排查原因?

时间序列预测ResNet输出固定为1.0的问题修复方案

核心错误点

  • 输出层激活函数选择错误:回归任务的单神经元输出层不该用softmax激活。softmax会将所有输出值归一化到总和为1,当只有1个输出神经元时,无论输入是什么,输出都会被强制映射为1.0,这是得到固定预测值的直接原因。回归任务应去掉激活函数用线性输出,若标签已归一化到0-1区间也可替换为sigmoid激活。
  • 评价指标选择错误:accuracy是分类任务专属指标,回归任务下该指标完全无参考意义,应该替换为MAE、RMSE这类回归适用的评价指标。

其他潜在问题

  • 输入数据未做归一化:如果输入特征或标签值域差异过大,容易导致模型训练不收敛。
  • 训练轮数设置过少:10轮训练对于深度残差网络来说通常不足以收敛,可根据验证集表现调整到50-100轮。
  • 残差块实现不匹配:需要确认residual_block函数的下采样逻辑和输出通道匹配规则,避免出现维度不匹配或梯度消失问题。

修正后的核心代码

def create_res_net():
    inputs = Input(shape=(50, 1))
    num_filters = 5
    
    t = BatchNormalization()(inputs)
    t = Conv1D(kernel_size=18, strides=1, filters=num_filters, padding="same")(t)
    t = relu_bn(t)
    
    num_blocks_list = [2, 5, 5, 2]
    for i in range(len(num_blocks_list)):
        num_blocks = num_blocks_list[i]
        for j in range(num_blocks):
            t = residual_block(t, downsample=(j==0 and i!=0), filters=num_filters)
        num_filters *= 2
    
    t = AveragePooling1D(2)(t)
    t = Flatten()(t)
    # 回归任务移除softmax激活,使用线性输出
    outputs = Dense(1)(t)
    
    model = Model(inputs, outputs)
    # 替换为回归适用的评价指标
    model.compile(optimizer='adam', loss='mse', metrics=['mae'])

    return model
model = create_res_net()
# 适当增加训练轮数,拆分验证集避免过拟合
model.fit(x=X, y=y_train, epochs=50, verbose=1, validation_split=0.2)

内容的提问来源于stack exchange,提问作者Houssem Eddine Louchene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 07:36:05