您的当前位置:首页正文

在tensorflow实现直接读取网络的参数(weightandbias)的值

2023-03-16 来源:钮旅网
在tensorflow实现直接读取⽹络的参数(weightandbias)

的值

训练好了⼀个⽹络,想要查看⽹络⾥⾯参数是否经过BP算法优化过,可以直接读取⽹络⾥⾯的参数,如果⼀直是随机初始化的值,则证明训练代码有问题,需要改。下⾯介绍如何直接读取⽹络的weight 和 bias。

(1) 获取参数的变量名。可以使⽤⼀下函数获取变量名:

def vars_generate1(self,scope_name_var): return [var for var in tf.global_variables() if scope_name_var invar.name ]

输⼊你想要读取的变量的⼀部分的名称(scope_name_var),然后通过这个函数返回⼀个List,⾥⾯是所有含有这个名称的变量。

(2) 利⽤session读取变量的值:

def get_weight(self):

full_connect_variable = self.vars_generate1(\"pred_network/full_connect/l5_conv\") with tf.Session() as sess:

sess.run(tf.global_variables_initializer()) ##⼀定要先初始化变量 print(sess.run(full_connect_variable[0]))

之后如果想要看参数随着训练的变化,你可以将这些参数保存到⼀个txt⽂件⾥⾯查看。补充知识:如何在 PyTorch 中设定学习率衰减(learning rate decay)

很多时候我们要对学习率(learning rate)进⾏衰减,下⾯的代码⽰范了如何每30个epoch按10%的速率衰减:

def adjust_learning_rate(optimizer, epoch):

\"\"\"Sets the learning rate to the initial LR decayed by 10 every 30 epochs\"\"\" lr = args.lr * (0.1 ** (epoch // 30))

for param_group in optimizer.param_groups: param_group['lr'] = lr

什么是param_groups?

optimizer通过param_group来管理参数组.param_group中保存了参数组及其对应的学习率,动量等等.所以我们可以通过更改param_group[‘lr']的值来更改对应参数组的学习率。

# 有两个`param_group`即,len(optim.param_groups)==2optim.SGD([

{'params': model.base.parameters()},

{'params': model.classifier.parameters(), 'lr': 1e-3} ], lr=1e-2, momentum=0.9)

#⼀个参数组

optim.SGD(model.parameters(), lr=1e-2, momentum=.9)

以上这篇在tensorflow实现直接读取⽹络的参数(weight and bias)的值就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个

参考,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容