未定义model时,如何保存PINN的权重与偏置?
手动管理PINN参数的保存与复用方法
针对你这种手动定义weights、biases和A张量而非使用Keras Model的场景,有两种简洁的方案实现参数保存与复用:
方案1:使用NumPy保存为数组文件
这种方法简单直接,适合仅需推理复用的场景:
保存参数
训练完成后,将所有参数的数值提取为NumPy数组,打包保存到.npz文件:
import numpy as np # 假设weights、biases、A是训练完成后的tf.Variable列表 params_dict = { 'weights': [w.numpy() for w in weights], 'biases': [b.numpy() for b in biases], 'A': [a.numpy() for a in A] } np.savez('pinn_trained_params.npz', **params_dict)
加载复用参数
需要使用模型时,先初始化与原参数形状一致的tf.Variable,再将保存的数值赋值进去:
import tensorflow as tf import numpy as np # 加载保存的参数 loaded_params = np.load('pinn_trained_params.npz') # 初始化变量(形状必须与训练时完全一致) weights = [tf.Variable(w) for w in loaded_params['weights']] biases = [tf.Variable(b) for b in loaded_params['biases']] A = [tf.Variable(a) for a in loaded_params['A']] # 直接传入neural_net函数使用 X_test = tf.constant([[...]], dtype=tf.float32) predictions = neural_net(X_test, weights, biases, A)
方案2:使用TensorFlow Checkpoint保存
这种方法更贴合TensorFlow生态,支持训练中断后续训,且无需手动处理NumPy转换:
保存参数
训练过程中或结束后,用tf.train.Checkpoint管理参数并保存:
# 创建Checkpoint对象,绑定需要保存的参数 checkpoint = tf.train.Checkpoint(weights=weights, biases=biases, A=A) # 保存到指定目录 checkpoint.save('./pinn_checkpoints/ckpt')
加载复用参数
初始化与原参数形状一致的变量后,通过Checkpoint恢复状态:
import tensorflow as tf # 先初始化与训练时形状完全相同的weights、biases、A变量 # (续训可直接用原变量;新环境需手动匹配形状创建) weights = [tf.Variable(tf.random.normal(shape=...)) for ...] # 匹配训练时的形状 biases = [tf.Variable(tf.zeros(shape=...)) for ...] A = [tf.Variable(tf.random.normal(shape=...)) for ...] # 恢复参数 checkpoint = tf.train.Checkpoint(weights=weights, biases=biases, A=A) # 加载最新的检查点 status = checkpoint.restore(tf.train.latest_checkpoint('./pinn_checkpoints')) # 可选:验证参数完全匹配,避免形状不匹配问题 status.assert_consumed() # 复用参数进行推理或续训 predictions = neural_net(X_test, weights, biases, A)
注意事项
- 加载时参数的形状、数据类型必须与保存时完全一致,否则会报错。
- 若需续训,优先选择方案2,可同时保存优化器状态(将优化器加入Checkpoint即可),实现无缝续训。
内容的提问来源于stack exchange,提问作者P. Zh.
相关产品推荐
相关产品推荐

