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

训练神经网络模型时出现SIGKILL内存错误该如何修复?

问题核心原因

触发SIGKILL的根本原因是输入形状设置错误,导致模型参数量异常膨胀耗尽内存:
你传入Flatten层的input_shape=datax.shape包含了样本数维度(也就是shape的第一个值,你取了5个样本,所以datax.shape第一个元素是5),而Keras的输入层input_shape不需要传入batch维度,只需要定义单个样本的形状。错误的输入形状会让后续全连接层(Dense)的参数量比预期大上百倍甚至千倍,哪怕只用5个样本也会直接占满内存。

解决步骤

  • 修正输入层形状设置
    将Flatten层的参数修改为:
    Flatten(input_shape=datax.shape[1:])
    
    datax.shape[1:]会去掉第一个样本数维度,仅传入单个样本的维度。
  • 对齐标签与输出层形状
    你当前的输出层是Dense(2),对应单样本输出2个二分类结果,而你的datay是三维结构,需要确认维度匹配,多余维度可以用squeeze压缩:
    datay = np.load(f)[:5, :, :].squeeze()
    
  • 验证模型参数量
    在model.compile()之后加一行model.summary()打印模型结构,确认总参数量在合理范围,一般非特大模型参数量不会超过1e7,要是看到参数量超过1e9就说明维度仍然设置错误。

修正后完整可运行代码示例

import gzip
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense
from tensorflow.keras.optimizers import Adam

f = gzip.GzipFile('Data_x.npy.gz', "r")
datax = np.load(f)[:5, :, :]
f.close()
f = gzip.GzipFile('Data_y.npy.gz', "r")
datay = np.load(f)[:5, :, :].squeeze()
f.close()
f = None

model = Sequential(
    [
        #Conv1D(32, 3, input_shape=datax.shape[1:], activation="relu"),
        Flatten(input_shape=datax.shape[1:]),
        Dense(750, activation='relu'),
        Dense(750, activation='relu'),
        Dense(2, activation='sigmoid')
    ]
)
model.summary() # 可查看参数量是否正常
model.compile(optimizer=Adam(learning_rate=0.1), loss="binary_crossentropy", metrics=['accuracy'])
model1 = model.fit(x=datax, y=datay, batch_size=5, epochs=5, shuffle=True, verbose=2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:36:03