def save_excel(netName, dataDict,colNames=None,):
# pf = pd.DataFrame(list(dataDict))
# order = list[dataDict.keys()]
# pf = pf[order]
# pf.rename(columns=order, inplace=True)
# file_path = pd.ExcelWriter('compdata.xlsx')
# pf.fillna(' ', inplace=True)
# pf.to_excel(file_path, encoding='utf-8', index=False)
# file_path.save()
if not colNames:
colNames = ['global_step', 'module.layer1.0.conv1.weight','module.layer2.0.conv1.weight',
'module.layer3.0.conv1.weight','module.layer4.0.conv1.weight']
excelName = netName+'.xls'
if not os.path.exists(excelName):
# os.system(r'touch {}'.format(excelName))
excel = xlwt.Workbook(encoding='utf-8')
sheet1 = excel.add_sheet(netName)
excel.save(excelName)
r_xls = open_workbook(excelName)
row = r_xls.sheets()[0].nrows # rows number exist
excel = copy(r_xls)
worksheet = excel.get_sheet(0)
for colIdx, colName in enumerate(colNames):
worksheet.write(row, colIdx, colName)
excel.save(excelName)
r_xls = open_workbook(excelName)
row = r_xls.sheets()[0].nrows # rows number exist
excel = copy(r_xls)
worksheet = excel.get_sheet(0)
for colIdx,colName in enumerate(colNames):
v = dataDict[colName]
if isinstance(v,torch.Tensor): v = v.item()
worksheet.write(row, colIdx,v)
excel.save(excelName)
def print_bpGrad(netName, globalStep, net,):
grads = {}
grads['global_step'] = globalStep
for name, parms in net.named_parameters():
if '0.conv1' in name: # input from layer1 to layer4, 0.conv1 is input conv / last back conv of every block
if isinstance(parms.grad, torch.Tensor):
meanGrad = torch.mean(parms.grad).item()
# print('net', netName, '-->name:', name, '-->grad_requirs:', parms.requires_grad,
# ' -->Mean grad_value:', meanGrad)
grads[name] = meanGrad
else:
print('net', netName, '-->name:', name, '-->grad_requirs:', parms.requires_grad)
# if 'backbone' in netName: save_excel(netName, grads)
print(['%s %.4f'%(k.replace('module.','',1).replace('.weight','',1),grads[k]) for k in grads.keys()])
return grads
调用1:
print_bpGrad('backbone1', global_step, backbone)
调用2:
losses = {'global_step':global_step, 'loss1':loss1.avg, 'loss2':loss2.avg}
save_excel('loss', losses, ['global_step', 'loss1','loss2'])
另一种:(和上面的方法结果好像不一样,每次出来的梯度值都是相同的,还不知道为什么)
这种写法不一定能用。。
if global_step % logInterv ==0:
params = dict(backbone.named_parameters())
v = [params[names[0]].data,params[names[1]].data,params[names[2]].data,params[names[3]].data]
v = [torch.mean(i).item() for i in v]
prtStr = '%d\t%.4f\t%.4f\t%.4f\t%.4f' % (global_step, v[0], v[1], v[2], v[3])
print('backbone1',prtStr)
f1.write(prtStr + '\n')