如何将Google Colab中训练的TensorFlow图像字幕模型本地保存
保存与加载图像字幕Encoder-Decoder模型方案
一、需保存的核心组件
根据你的代码逻辑,需要保存以下内容以完整恢复模型功能:
- 训练好的
encoder和decoder模型权重 - 文本分词器
tokenizer(生成字幕依赖它完成词与ID的双向映射) - 模型初始化参数:
embedding_dim、units、vocab_size(重新创建模型实例时必须用到)
二、模型保存步骤
1. 保存模型权重
由于你使用自定义tf.keras.Model子类,直接保存权重是最稳妥的方式:
# 保存encoder和decoder的权重文件 encoder.save_weights('./encoder_weights.h5') decoder.save_weights('./decoder_weights.h5')
2. 保存分词器与配置参数
用pickle序列化保存tokenizer和必要参数:
import pickle # 保存分词器 with open('./tokenizer.pkl', 'wb') as f: pickle.dump(tokenizer, f) # 保存模型初始化配置 model_config = { 'embedding_dim': embedding_dim, 'units': units, 'vocab_size': vocab_size } with open('./model_config.pkl', 'wb') as f: pickle.dump(model_config, f)
三、模型恢复步骤
当需要重新使用模型时,按以下流程恢复:
1. 加载配置与分词器
import pickle # 加载模型配置参数 with open('./model_config.pkl', 'rb') as f: config = pickle.load(f) embedding_dim = config['embedding_dim'] units = config['units'] vocab_size = config['vocab_size'] # 加载分词器 with open('./tokenizer.pkl', 'rb') as f: tokenizer = pickle.load(f)
2. 重建模型并加载权重
# 重新创建encoder和decoder实例 encoder = VGG19_Encoder(embedding_dim) decoder = Rnn_Local_Decoder(embedding_dim, units, vocab_size) # 自定义子类模型需先通过一次前向传播触发权重构建 # 用符合维度的虚拟输入即可 dummy_img_features = tf.random.normal((1, 49, 512)) # 维度匹配你的图像特征输出 _ = encoder(dummy_img_features) dummy_dec_input = tf.expand_dims([0], 0) dummy_hidden = decoder.reset_state(batch_size=1) _ = decoder(dummy_dec_input, dummy_img_features, dummy_hidden) # 加载预训练权重 encoder.load_weights('./encoder_weights.h5') decoder.load_weights('./decoder_weights.h5')
3. 验证功能
加载完成后,直接调用generate_prediction函数即可正常生成字幕,逻辑与训练时完全一致。
四、Google Colab 专属提示
如果在Colab中操作,建议将文件保存到Google Drive避免会话结束丢失:
# 先挂载Google Drive from google.colab import drive drive.mount('/content/drive') # 修改保存路径为Drive内路径 encoder.save_weights('/content/drive/MyDrive/encoder_weights.h5') # 其他文件保存同理
加载时同样从Drive路径读取即可。
内容的提问来源于stack exchange,提问作者Straxan
相关产品推荐
相关产品推荐

