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

基于TensorFlow后端的Keras:如何识别计算图中的变量(张量)

解决Jupyter Notebook中跳过预处理、直接从训练阶段重启的方案

嘿,我太懂你这种不想反复跑耗时预处理的心情了——毕竟每次等预处理跑完真的很磨人,哪怕加载预处理后的数据都要花不少时间。针对你在Python 3.6的Jupyter Notebook里的需求,我整理了几个实用的办法:

方案1:利用Jupyter内核的变量持久化(最简单)

Jupyter的内核在运行时会把所有变量保存在内存里,只要你不重启内核,这些变量就一直存在。具体操作:

  • 先完整跑一遍所有预处理单元格,把预处理好的数据(比如train_X、train_y、验证集数据等)存在全局变量里。
  • 之后每次想从训练阶段重新运行时,直接从训练的第一个单元格开始执行就行,不用碰预处理的单元格。
  • 放心,你训练单元格里的K.clear_session()只会清除Keras的会话、模型、计算图这些内容,完全不会删掉你已经存在的预处理数据变量。
  • 小提示:可以给预处理单元格加个醒目的注释,比如# 🚀 仅首次运行:数据预处理模块,避免不小心重复运行。

方案2:用joblib快速序列化数据(适合需要重启内核的情况)

如果有时候不得不重启内核,又不想重新跑预处理,那用joblib序列化数据比普通的文件加载快很多,尤其是处理大数组的时候:

  • 预处理完成后,在单独的单元格里保存数据:
    import joblib
    # 把所有需要的预处理数据打包保存
    joblib.dump((train_X, train_y, val_X, val_y), 'preprocessed_data.pkl')
    
  • 在训练阶段的第一个单元格里,先判断文件是否存在,存在就直接加载,再执行K.clear_session():
    import joblib
    import os
    
    # 优先加载已保存的预处理数据
    if os.path.exists('preprocessed_data.pkl'):
        train_X, train_y, val_X, val_y = joblib.load('preprocessed_data.pkl')
    else:
        # 万一没保存的话,再跑预处理(可选,根据你的情况调整)
        pass
    
    # 清除Keras旧会话,准备训练
    from keras import backend as K
    K.clear_session()
    

方案3:用Jupyter魔术命令%store(跨会话快速加载)

Jupyter自带的%store命令可以跨会话保存变量,重启内核甚至关闭Notebook再打开都能快速加载,速度比读文件快:

  • 预处理完成后,运行这个命令保存需要的变量:
    # 把所有预处理好的变量存起来
    %store train_X train_y val_X val_y
    
  • 下次重启内核或者打开Notebook后,在训练的第一个单元格里先加载变量:
    # 加载之前保存的变量
    %store -r train_X train_y val_X val_y
    
    # 然后执行K.clear_session()
    from keras import backend as K
    K.clear_session()
    

小提醒

  • 不管用哪种方法,K.clear_session()都要放在加载完预处理数据之后执行,这样既不会影响数据,又能清理之前的Keras残留状态,避免训练时出现奇怪的问题。
  • 如果你的预处理数据大到占内存,那可以考虑用numpy的memmap做内存映射,但前面的三个方案已经能覆盖绝大多数场景啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:41:11