Tensorflow 预训练权重有选择加载参数

训练自己的模型我们一般都会使用预训练权重,有时别人训练好的模型类别与自己的不符合,这个时候就不需要加载一些层的参数.

      由于原网络权重为150类,我只需要几类,最后一层的conv带有num_class参数,所以“your name scope替换为不需要的层的name,加载模型的时候就不会加载这层的参数。

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

...........................................

restore_var = [v for v in tf.global_variables()]
variables_to_resotre = [v for v in restore_var if v.name.split('/')[0] != 'your name scope']

..............................................

ckpt = tf.train.get_checkpoint_state('./model/')
saver = tf.train.Saver(var_list=variables_to_resotre)
saver.restore(sess, ckpt.model_checkpoint_path)

下面给一段查看各个网络层参数的name scope, 便于修改。


from tensorflow.python import pywrap_tensorflow


checkpoint_path = “your ckpt path”
# Read data from checkpoint file

reader = pywrap_tensorflow.NewCheckpointReader(checkpoint_path)

var_to_shape_map = reader.get_variable_to_shape_map()

# Print tensor name and values

for key in var_to_shape_map:

    print("tensor_name: ", key)

    print(reader.get_tensor(key))

 还可以使用tensorflow内置模块slim加载需要的层

exclude = ['layer1', 'layer2']
variables_to_restore = slim.get_variables_to_restore(exclude=exclude)
saver = tf.train.Saver(variables_to_restore)
saver.restore(sess, “model_path”)

 

 

### 如何将TensorFlow预训练模型权重转换为PyTorch格式 #### 使用Transformers库的转换脚本 为了简化从TensorFlow到PyTorch的迁移过程,Hugging Face提供了`transformers`库中的转换脚本。此方法适用于多种流行的自然语言处理(NLP)模型,如BERT、GPT等。 对于特定于Google BERT的情况,可以通过以下Python代码实现转换: ```python from transformers import BertTokenizer, TFBertModel, BertModel # 加载TensorFlow版的BERT模型及其分词器 tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') tf_model = TFBertModel.from_pretrained("bert-base-uncased") # 转换成对应的PyTorch模型结构 pt_model = BertModel.from_pretrained('bert-uncased', from_tf=True) # 测试转换后的模型能否正常工作 text = "Replace me by any text you'd like." encoded_input = tokenizer(text, return_tensors='pt') # 'pt'代表返回PyTorch张量 output = pt_model(**encoded_input) print(output.last_hidden_state.shape) # 打印最后一层隐藏状态大小验证成功加载 ``` 这段代码展示了如何利用官方支持的方式轻松完成由TensorFlow至PyTorch版本的切换[^2]。 #### 自定义转换流程 当面对不被上述自动化工具覆盖的其他类型的神经网络架构时,则可能需要手动编写转换逻辑来映射两个框架之间的变量名和参数初始化方式。这通常涉及以下几个方面的工作: 1. **理解源模型内部细节**:深入研究原始TensorFlow实现的具体设计思路以及各组件的功能; 2. **构建目标平台上的对应模型实例**:依据所了解的信息,在PyTorch环境中重现相同的计算图布局; 3. **逐层对比并复制权重数据**:通过比较两者的命名约定找到匹配关系,并把已有的浮点数值赋给新创建的对象成员属性; 4. **测试一致性**:最后一步是对齐输入样本经过两种不同环境下的前向传播结果,确保二者表现一致或接近。 这种方法虽然较为繁琐但也更加灵活可控,适合那些希望深入了解底层机制的研究人员和技术爱好者尝试[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值