如何在训练模型时修复内存错误?
Posted
技术标签:
【中文标题】如何在训练模型时修复内存错误?【英文标题】:How to fix Memory Error while training model? 【发布时间】:2022-01-05 08:51:56 【问题描述】:我最近一直在研究神经网络,但每次我尝试编译模型时,我都会得到一个 SIGKILL,通过查看 Activity Monitor,它来自内存错误。我的数据非常大,但这不是问题的一部分,因为我尝试提取其中的一小部分,但仍然遇到相同的错误。这是我正在使用的代码:
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, :, :]
f.close()
f = None
model = Sequential(
[
#Conv1D(32, 3, input_shape=datax.shape, activation="relu"),
Flatten(input_shape=datax.shape),
Dense(750, activation='relu'),
Dense(750, activation='relu'),
Dense(2, activation='sigmoid')
]
)
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)
我已经为模型尝试了许多不同的结构和不同的批量大小/时期,但我仍然收到此错误。非常感谢您对此事的任何帮助。
【问题讨论】:
嗨,Kookies,究竟是什么错误? @FaisalShahbaz 我得到了 SIGKILL,经过进一步研究后,我要么停止了程序,要么发现使用了太多内存 【参考方案1】:您在模型中添加 dropout 层。
Dropout 是一种在训练期间忽略随机选择的神经元的技术。他们是随机“辍学”的。这意味着它们对下游神经元激活的贡献在前向传递中被暂时移除,并且任何权重更新都不会应用于后向传递中的神经元。
model = Sequential(
[
#Conv1D(32, 3, input_shape=datax.shape, activation="relu"),
Flatten(input_shape=datax.shape),
Dense(750, activation='relu'),
Dropout(0.2),
Dense(750, activation='relu'),
Dropout(0.2),
Dense(2, activation='sigmoid')
]
【讨论】:
以上是关于如何在训练模型时修复内存错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 tensorflow 中的“ValueError:空训练数据”错误
执行 scikit-learn 剪影分数时如何修复内存错误?
keras上的多GPU训练错误(OOM)(足够的内存,可能是配置问题)
如何修复“致命错误:堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足”错误