tensorflow-finetune保存

本文分享了在深度学习模型finetune过程中的实践经验,包括使用pywrap_tensorflow检查模型变化,解决finetune中旧层与新层共存的问题,以及tf.train.Saver()在保存和恢复模型时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

finetune主要采用此博客的方法:

https://blog.youkuaiyun.com/Alienge/article/details/81012363

同时非常感谢该博主

最近需要做个例子,先训练,然后测试,再finetune,再测试。训练和finetune不说了, 就是那个博客的方法了。可是那个网络,太隆昌了。其实我是不太喜欢这么复杂的算法的,不过要求用,只好用这个。这造成了我的一点不自信,毕竟例子是比较简单的,所以我进入不太好的的第一步,用pywrap_tensorflow查看模型:

from tensorflow.python import pywrap_tensorflow
import os
import sys

class Logger(object):
    def __init__(self, filename="Default.log"):
        self.terminal = sys.stdout
        self.log = open(filename, "a")

    def write(self, message):
        self.terminal.write(message)
        self.log.write(message)

    def flush(self):
        pass

type = sys.getfilesystemencoding()
sys.stdout = Logger('....txt')

checkpoint_path1 = ‘...’
reader1 = pywrap_tensorflow.NewCheckpointReader(checkpoint_path1)
var_to_shape_map1 = reader1.get_variable_to_shape_map()

for key1 in var_to_shape_map1:
        print("tensor_name: ",key1)
        print(reader1.get_tensor(key1))

我以后不想用这个方法去对比模型前后变化,我没用好,有时候输出挺正常的,有时候每个层的顺序是混乱的。而且finetune中以前某些层后面连了新层,以前的老层并没有删掉(怎么删掉老层??有人知道吗?关键是老层还一起训练了,这个解决以后再发一篇),老层和新层都一起输出了,造成总体上比较乱。除非设置要保存的层。搞这个浪费了一些时间。后来还是用了以上博客中的方法。那个方法刚开始没成功,后来把 value[i].all()==value[i+1].all()改成了(value[i]==value[i+1]).all(),结果正常。

weight_test = g.get_tensor_by_name('layer1/weights:0')
......
for i in range(epoch)
    ...
    weight_test_value = sess.run(weight_test,feed_dict={x_place: batch_xs, y_place: batch_ys})
    value.append(weight_test_value)

for i in range(len(value)-1):
    if (value[i]==value[i+1]).all():
        print("weight is equal")
        

不过这并没有让我成功使用finetune得到的model。于是引出来第二个大坑:tf.train.saver()
首先,我train了一个model,用saver()保存了。然后,我在finetune代码里,用saver()恢复了图,增加了一些新层,又restore了参数。但是后来,我一直在用这个同样的saver保存。其实我之前就实验过保存不同的list,但是当时脑抽,居然没想到这一点。后来加了个saver2 = tf.train.saver(),再保存,再用demo读取这个model去测试,就正常了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值