每次运行Python脚本需重复导入数据?DQN参数加载优化求助
问题1:每次运行Python脚本时,是否必须重复导入数据?
- 不是必须的。Python脚本每次运行都是独立进程,进程结束后内存数据会被释放,默认确实需要重新加载,但可以通过以下方式避免重复操作:
- 将数据转为高效二进制格式(如
pickle、numpy的.npy/.npz),后续直接加载二进制文件,速度远快于Excel等文本格式。 - 把脚本核心逻辑封装为函数,在交互式环境(如IPython)中一次加载数据后,反复调用函数即可,无需重新导入。
- 用本地缓存工具(如
joblib)或封装成模块:模块级变量只会在第一次导入时初始化,后续导入直接复用已加载的数据。
- 将数据转为高效二进制格式(如
问题2:如何避免每次运行Python代码都从Excel加载DQN参数?
针对从Excel加载Matlab导出的DQN权重耗时久的问题,提供三种实用方案:
方案1:将参数保存为二进制格式(优先推荐)
第一次加载Excel参数后,用序列化工具把参数对象保存为二进制文件,后续直接读取该文件:
import pickle import pandas as pd # 首次运行执行:加载Excel并保存参数 weights_df = pd.read_excel('dqn_weights.xlsx') # 整理成字典/数组形式的参数集合 dqn_params = { 'layer1_weights': weights_df['layer1'].values, 'layer2_weights': weights_df['layer2'].values, # 补充其他模型参数 } # 序列化保存 with open('dqn_params.pkl', 'wb') as f: pickle.dump(dqn_params, f)
后续运行时直接加载二进制文件:
import pickle with open('dqn_params.pkl', 'rb') as f: dqn_params = pickle.load(f) # 直接用参数初始化模型
方案2:硬编码参数到脚本(适合小规模参数)
如果参数数量不多,可将首次加载后的参数值直接复制到脚本中,无需再读取外部文件:
# 直接定义参数集合 dqn_params = { 'layer1_weights': [0.123, 0.456, 0.789, ...], # 从Excel读取后复制的数值 'layer2_weights': [0.987, 0.654, 0.321, ...], # 补充其他参数 }
此方式无需加载外部文件,但参数规模过大时会导致脚本臃肿,仅适合小体量模型。
方案3:封装为Python模块
把参数加载逻辑放到单独模块(如dqn_utils.py),利用模块初始化仅执行一次的特性实现缓存:
# dqn_utils.py import pandas as pd import pickle import os if os.path.exists('dqn_params.pkl'): # 存在缓存则直接加载 with open('dqn_params.pkl', 'rb') as f: dqn_params = pickle.load(f) else: # 首次运行加载Excel并缓存 weights_df = pd.read_excel('dqn_weights.xlsx') dqn_params = { 'layer1_weights': weights_df['layer1'].values, 'layer2_weights': weights_df['layer2'].values, } with open('dqn_params.pkl', 'wb') as f: pickle.dump(dqn_params, f)
主脚本中直接导入复用:
from dqn_utils import dqn_params # 用参数初始化模型
这种逻辑和你在Jupyter Notebook中一次加载后反复使用的机制一致。
内容的提问来源于stack exchange,提问作者Issa Fares
相关产品推荐
相关产品推荐

