1.检查需要训练的模型参数是否设置requires_grad_为True:
grads_lis = []
for param in model.parameters():
# print(param.requires_grad)
grads_lis.append(param.requires_grad)
print('-----------------------')
param_name_lis = []
for name, param in model.named_parameters():
# print(f"Name: {name}, Parameter shape: {param.shape}")
param_name_lis.append(name)
# set grad true
print('------set paprams grad true--------')
false_grads = [i for i, value in enumerate(grads_lis) if not value]
for i in false_grads:
parameter_name = param_name_lis[i]
# 通过名称获取参数
parameter = None
for name, param in model.named_parameters():
if name == parameter_name:
parameter = param
break
if parameter is not None:
parameter.requires_grad = True
else:
print(f"Parameter with name '{parameter_name}' not found.")
# check the new model params
grads_lis2 = []
for param in model.parameters():
print(param.requires_grad)
grads_lis2.append(param.requires_grad)
print('-----------------------')
2.确保操作是可导的:
检查你的操作是否支持自动求导。例如,一些整数类型的张量操作不支持自动求导。
3.检查数据类型:
确保所有的张量都是相同的数据类型,并且适合进行梯度计算。例如,使用 float32 而不是 int32。