官方网站做兼职,网站建设常识网站建设技术知识大全,门户网站制作哪专业,下单网站搭建很多时候嵌入式或者新硬件需要纯净的权重模型和激活值#xff08;运行时中间值#xff09;#xff0c;本文提供一种最简洁的方法。 假设已经有模型model和pt文件了#xff0c;在当前目录下新建weights文件夹#xff0c;运行最后三行代码#xff0c;就可以得到模型的权重运行时中间值本文提供一种最简洁的方法。 假设已经有模型model和pt文件了在当前目录下新建weights文件夹运行最后三行代码就可以得到模型的权重文本形式和二进制形式
model.load_state_dict(state_dict)for name, param in model.named_parameters():print(param.data.numpy(),fileopen(fweights/{name}.txt, w))param.data.numpy().tofile(fweights/{name}.bin)对于二进制形式的文件可以通过od -t f4 binary file name 查看其对应的浮点数值。f4表示fp32.
打印forward的中间值
def hook_fn(module, input, output):key str(module)intermediate_outputs {}intermediate_outputs[key-input] inputintermediate_outputs[key-output] outputprint(intermediate_outputs)def register_hooks(model):for name, layer in model.named_children():# print(name, layer) # dump all layerslayer.register_forward_hook(hook_fn)# Recursively apply the same to all submodulesregister_hooks(layer)register_hooks(model)其中regster_hooks和以下等价不需要recursive了
def register_hooks(model):for name, layer in model.named_modules():# print(name, layer) # dump all layerslayer.register_forward_hook(hook_fn)其中nn.sequential作为一个整体目前没办法拆开来看其内部的中间值。