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

R语言Jupyter中Keras Nadam优化器报错及训练内核崩溃问题

问题原因及解决方法

核心原因

  1. 版本不兼容:R的keras包与底层TensorFlow版本不匹配,旧版TensorFlow的keras.optimizers模块中没有Nadam类,导致optimizer_nadam()调用失败;改用字符串"Nadam"后,底层实际找不到对应优化器,触发未捕获的错误导致内核崩溃。
  2. 内存/数据问题:600轮训练+10000的batch_size可能导致内存过载,或者输入数据的维度、类型与模型输入层不匹配,引发底层张量错误。

解决步骤

1. 对齐keras与TensorFlow版本

先检查当前版本:

library(keras)
# 查看R keras包版本
packageVersion("keras")
# 查看底层TensorFlow版本
tf$`__version__`

如果TensorFlow版本低于2.10,建议安装兼容的稳定版本,让R keras包自动匹配:

install_keras(tensorflow = "2.15") # 选择2.10以上的稳定版本,如2.15

2. 正确调用Nadam优化器

不要用字符串指定,直接调用TensorFlow原生的Nadam优化器,或者使用R keras包的封装函数:

# 方法1:调用TensorFlow原生优化器
model %>% compile(optimizer = tf$keras$optimizers$Nadam(), loss = 'poisson')

# 方法2:确保R keras包正确封装后使用
model %>% compile(optimizer = optimizer_nadam(learning_rate = 0.001), loss = 'poisson')

3. 排查内核崩溃的其他可能

  • 调整训练参数:先降低epochs和batch_size,验证是否是内存问题:
    fit <- model %>% 
            fit(
              list(Xlearn, Brlearn, Relearn, Vlearn), 
              Ylearn, 
              epochs=50,  # 先改小测试
              batch_size=5000,  # 减小批次
              verbose=1,  # 打开日志,查看训练过程
              validation_split=0
            )
    
  • 检查输入数据:确认输入数据的维度、类型与模型输入层完全匹配,无缺失值、异常值,且为数值型张量(如float32):
    # 检查输入数据维度
    dim(Xlearn)
    dim(Brlearn)
    # 检查数据类型
    class(Xlearn)
    # 转换为float32(如果需要)
    Xlearn <- array(Xlearn, dtype = "float32")
    
  • 监控内存使用:训练时观察系统内存占用,若内存占满,继续减小batch_size或简化模型结构。

内容的提问来源于stack exchange,提问作者J. Grünenwald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:40:29