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

基于LSTM的时序图像像素选择模型数据处理与训练咨询

问题诊断

你当前训练过程全程loss为nan、准确率虚高为1.0,是数据维度不匹配、损失函数与标签/激活函数不匹配、LSTM激活函数选择错误三个核心问题叠加导致的,以下是对应修正方案。


1. 数据传入与正常训练的配置方法

首先明确各数据的维度对应逻辑:

  • 切分后的原始输入X_train形状为(220, 15, 100, 100, 1),对应含义为220个独立图像块样本、每个样本覆盖15帧时序、单帧图像块为100×100单通道二值图。LSTM要求输入格式为(样本数, 时间步, 单时间步特征数),你不需要调整时序逻辑,只需要把单帧的空间维度展平即可:
# 将X_train从(220,15,100,100,1)转为LSTM适配的(220,15,10000)
X_train = X_train.reshape(220, 15, 100*100)
# 二值图像像素值归一化到0-1区间,避免数值溢出导致nan
X_train = X_train.astype("float32") / 255.0

你当前持有的Y_train形状为(220,15,1000),和单帧10000个像素的标注需求存在10倍维度差,属于标签切分/展平阶段的计算错误,必须先修正标签形状到(220,15,10000),保证每个像素对应一个稳定/不稳定的标注值,再开展训练。

模型部分需要同步修正三个错误点:

  • LSTM层不要使用relu作为激活函数,LSTM的循环门结构默认适配tanh激活,用relu极易触发梯度爆炸导致数值溢出出现nan,保留默认激活即可。
  • 输出层不能用relu激活,分类任务的输出层必须匹配概率约束的激活函数,否则交叉熵损失计算会直接返回nan。
  • 损失函数必须和标签格式匹配,逐像素二分类场景不能直接用多分类的categorical_crossentropy。

修正后的基础可运行模型代码如下:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, BatchNormalization, Dense

model = Sequential()
model.add(LSTM(16, input_shape=(15, 100*100), return_sequences=True))
model.add(BatchNormalization())
# 逐像素二分类用sigmoid激活,输出维度匹配10000个像素
model.add(Dense(10000, activation="sigmoid"))
# 二分类对应binary_crossentropy损失
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
model.summary()

# 训练时batch_size不要设置过大,总样本仅220个,取16/32即可,避免验证集样本过少导致准确率虚高
history = model.fit(X_train, Y_train, epochs=5, batch_size=32, validation_split=0.1, verbose=2)

如果训练过程仍出现nan,可以将Adam优化器的学习率调低到1e-4,缓解梯度过大的问题。


2. 标签转one-hot格式的方法与适配说明

你提到的目标标签形状(220,15,2)存在维度逻辑错误:逐像素分类任务必须保留像素位置维度,正确的二分类one-hot标签形状应为(220,15,10000,2),最后一维的两个值分别对应该像素属于「不稳定类」「稳定类」的真值。
转换方法直接调用keras内置的one-hot编码工具即可:

from tensorflow.keras.utils import to_categorical
# 前提是Y_train已经修正为形状(220,15,10000),像素值为0(不稳定/黑)、1(稳定/白)
Y_train_onehot = to_categorical(Y_train, num_classes=2)
# 转换后形状自动为(220,15,10000,2)

转换后的标签可以被模型正常读取,只需要同步调整模型输出层和损失函数即可适配:

# 输出层维度改为2,用softmax激活输出两个类别的概率
model.add(Dense(2, activation="softmax"))
# one-hot标签对应categorical_crossentropy损失
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])

额外注意事项

  • 切分图像块时必须同步切分二值掩膜,保证每个图像块和对应掩膜块的像素位置完全对齐,避免标签错位。
  • 总样本量仅220个,直接训练很容易过拟合,建议在LSTM层和输出层之间加Dropout层降低过拟合风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:21:33