神经网络同时优化两个模型的参数/加载两个模型的参数

神经网络同时优化两个模型的参数/加载两个模型的参数

框架:Pytorch
以Adam为例

一、传参和优化
1、传入/优化一个模型的参数:
opt= torch.optim.Adam(model_1.parameters)
2、同时传入/优化两个模型的参数:
opt = torch.optim.Adam([
	{'params': model_1.parameters(), 'lr': 0.001,}, 
	{'params': model_2.parameters()},
	])
3、形式2两个模型具有相同的其他参数(如 lr 等),若要设置不同的参数,可以分别在字典中给出
opt = torch.optim.Adam([
	{'params': model_1.parameters(), 'lr': 0.002}, 
	{'params': model_2.parameters(), 'lr': 0.003}
	])
	# 除lr以外的其他参数都可以采用同样方式给出
二、保存和加载
1、同一文件中保存多个模型的参数

1.1、保存单个模型

# 保存整个模型
save_name = 'models.pth'
torch.save(model_1, save_name)

# 仅保存参数
save_name = 'models.pt'
torch.save(model_1.state_dict(), save_name)

1.2、保存多个模型

# 整体保存
save_name = 'models.pth'
save_model = {
	'model_1': model_1,
	'model_2': model_2,
}
torch.save(save_model, save_name)

# 仅保存多个模型中的参数
save_name = 'models.pt'
save_model = {
	'model_1': model_1.state_dict(),
	'model_2': model_2.state_dict(),
}
torch.save(save_model, save_name)
2、从一个文件中加载多个模型的参数

2.1、加载单个模型(参数)

# 加载整个模型
save_name = 'models.pth'
model_1 = torch.load(save_name)

# 仅加载参数
save_name = 'models.pt'
model_1 = Net_1()	# 实例化模型
model_1.load_state_dict(torch.load(save_name))

2.2、加载多个模型(参数)

# 整体加载
save_name = 'models.pth'
load_models = torch.load(save_name)
model_1 = load_models['model_1']
model_2 = load_models['model_2']

# 仅加载多个模型中的参数
save_name = 'models.pt'
load_models = torch.load(save_name)
model_1 = Net_1()	# 实例化模型
model_2 = Net_2()	# 实例化模型
model_1.load_state_dict(load_models['model_1'])
model_2.load_state_dict(load_models['model_2'])
说明:整个模型和仅参数的区别:

整个模型:是保存整个网络结构和参数,使用时会加载结构和其中的参数;
仅参数:仅保存网络模型中的参数,在使用时需要先用训练时的模型实例化,再往里面填入参数。
举个栗子:
加载整个模型就是边搭框架边填充参数;仅参数需要先搭好框架(先实例化)再往框架里填参数

  • 27
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在K210上同时运行两个模型,您需要使用Kendryte IDE进行编程。下面是基本步骤: 1. 准备两个模型:将两个模型分别准备好,并确保它们都能在Kendryte IDE中正常运行。 2. 创建项目:打开Kendryte IDE,创建一个新项目。 3. 设置环境:在项目设置中,选择K210作为目标设备,并确保您已正确设置了Kendryte SDK和工具链。 4. 添加模型:将两个模型添加到项目中。在项目资源管理器中,右键单击“src”文件夹,选择“添加现有文件”,然后选择两个模型。 5. 编写代码:在主函数中,编写代码以加载和运行两个模型。您需要使用两个不同的神经网络实例来加载和运行每个模型。以下是一个示例代码: ```c #include "kpu.h" #define MODEL_1_PATH "model_1.kmodel" #define MODEL_2_PATH "model_2.kmodel" kpu_model_context_t model_1_ctx; kpu_model_context_t model_2_ctx; void main() { // 初始化KPU kpu_config_t config; config.mode = KPU_MODE_NORMAL; kpu_init(&config); // 加载和初始化模型1 uint8_t *model_1_data; size_t model_1_size; kpu_model_load_from_flash(model_1_data, model_1_size, &model_1_ctx); kpu_model_input_init(&model_1_ctx, 0, 0, 1, 1, KPU_IMAGE_CHANNEL_NUM, KPU_FILTER_3X3_STRIDE_1_VALID_PADDING); kpu_model_output_init(&model_1_ctx, 0, 0, 1, 1, KPU_IMAGE_CHANNEL_NUM, KPU_FILTER_3X3_STRIDE_1_VALID_PADDING); // 加载和初始化模型2 uint8_t *model_2_data; size_t model_2_size; kpu_model_load_from_flash(model_2_data, model_2_size, &model_2_ctx); kpu_model_input_init(&model_2_ctx, 0, 0, 1, 1, KPU_IMAGE_CHANNEL_NUM, KPU_FILTER_3X3_STRIDE_1_VALID_PADDING); kpu_model_output_init(&model_2_ctx, 0, 0, 1, 1, KPU_IMAGE_CHANNEL_NUM, KPU_FILTER_3X3_STRIDE_1_VALID_PADDING); // 运行模型1 kpu_run_kmodel(&model_1_ctx, input_data, output_data, NULL); // 运行模型2 kpu_run_kmodel(&model_2_ctx, input_data, output_data, NULL); // 关闭KPU kpu_deinit(); } ``` 6. 编译和烧录:编译代码并将其烧录到K210设备上。确保您已正确连接设备并将其连接到电脑。 7. 测试:在设备上运行程序,并测试它是否同时运行两个模型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值