MATLAB上丝滑地调用自己训练的pytorch神经网络模型

MATLAB上丝滑地调用自己训练的pytorch神经网络模型

一、环境配置准备

在MATLAB上加载pytorch环境

在MATLAB中运行pytorch的虚拟环境,需要我们自己在MATLAB的命令行输入:

pyversion 'C:\\Users\\31105\\.conda\\...\\python.exe' 

中间的路径是虚拟环境的绝对路径。

如果忘记了虚拟环境在哪,要找这个路径,可以有两种方法
1, 在VScode里鼠标停在内核按键就会直接显示出来
2,在cmd中:

conda activate shi #(shi是虚拟环境名字)
Python
import torch
print(torch.path)

然后顺着torch的路径往回找就能找到python.exe的路径了

使用pth文件将训练好的模型的参数保存

这个方法应该很好找,本文就不展开讲了

二、调用文件的准备

本文也是参考了这篇文章 MATLAB调用Pytorch神经网络模型进行预测 不过为了适配自己的项目,就一些细节做了调整。在模型方面,本文将展示基于MLP模型的调用文件的具体代码。

module.py文件的准备

创建一个module.py文件。这个文件所描述的是模型的框架,具体如下:

from torch import nn
import torch.nn.functional as f

class NeuralNetwork(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(1401,800),
            nn.ReLU(),
            nn.Linear(800, 600),
            nn.ReLU(),
            nn.Linear(600, 400),
        )
        #self.initialize_weights() 
        #self.initialize_parameters()

    def forward(self, x):
        logits = self.linear_relu_stack(x)
        return logits

model_pre.py文件的准备

创建一个model_pre.py文件,这个部分就是将训练好的模型的参数代入到模型框架中。这个加载函数的输入值:params_path就是保存好的pth的模型参数文件的路径。

import torch
import numpy as np
from module import NeuralNetwork

def model_load(params_path):
    model = NeuralNetwork()#定义模型
    model.load_state_dict(torch.load(params_path, map_location=torch.device('cpu')))#加载模型参数
    model.eval()#设置为测试模式
    return model

pred.py文件的准备

创建一个文件专门用来预测,本文特意单独开的这个预测文件,这样子可以使每次的预测的时间开销小些。这个预测函数的输入值:model就是前文加载好的模型,data就是所需要预测的数据。

import torch
import numpy as np  

def prediction(model, data):
    data = torch.tensor(data, dtype=torch.float32)#转为tensor
    with torch.no_grad():#不计算梯度,因为是预测阶段
        pred = model(data)#预测
    pred = pred.numpy()#转为numpy数组
    return pred

三、MATLAB上的调用

首先将上述所有文件保存在MATLAB的工作文件夹中,然后在MATLAB上加载这三个文件,因为本文的内置函数需要多次调用,故用全局变量将加载和预测工作分开。
下面在MATLAB上编写如下代码。
加载代码:

	global predi;
 	global model;
    MLP = py.importlib.import_module('module');%读取
    py.importlib.reload(MLP);%加载
    mode = py.importlib.import_module('model_pre');%读取
    py.importlib.reload(mode);%加载
    model = mode.model_load(pyargs('params_path', 'D:\\MATLAB2023\\bin\\...\\MLP_4000.pth'));
    predi = py.importlib.import_module('pred');%读取
    py.importlib.reload(predi);%加载

预测代码:

	global predi;
    global model;
    f_pred = predi.prediction(pyargs('model',model,'data', data1));%预测
    f_pred = double(f_pred);

在作者的项目中,该方法调用的速度较快,可以满足正常程序对于速度的需求。

至此,这个方法就已经完整说明了。

祝你顺利地完成上述操作,在MATLAB上丝滑地调用自己训练好的pytorch模型!

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要使用Matlab的Python接口来调用LightGBM的Python包,需要按照以下步骤进行操作: 1. 确认已经安装了Python和LightGBM的Python包。 2. 在Matlab调用Python,需要先通过pyversion命令指定Python的版本。例如: ```matlab pyversion /usr/local/bin/python3 ``` 这里假设Python3已经安装在/usr/local/bin目录下。 3. 使用py.importlib.import_module函数来导入LightGBM的Python包。例如: ```matlab lgb = py.importlib.import_module('lightgbm'); ``` 这里将导入名为'lightgbm'的Python包,并将其保存在变量lgb中。 4. 使用lgb.train函数来训练LightGBM模型。例如: ```matlab train_data = lgb.Dataset(X_train, label=y_train); params = struct('objective', 'binary', 'num_leaves', 31, 'learning_rate', 0.05); model = lgb.train(params, train_data, 100); ``` 这里使用lgb.Dataset函数来创建训练数据集,然后通过一个参数结构体params来设置模型的参数,最后使用lgb.train函数来训练模型并将结果保存在变量model中。 5. 使用model.predict函数来进行预测。例如: ```matlab y_pred = model.predict(X_test); ``` 这里使用model.predict函数来对测试数据集进行预测,并将结果保存在变量y_pred中。 6. 最后,根据需要使用Matlab内置的函数来对预测结果进行分析和评估。 以上就是使用Matlab的Python接口来调用LightGBM的Python包的基本流程。需要注意的是,由于Matlab和Python是两种不同的编程语言,因此在使用它们进行混合编程时需要格外小心,以避免出现不必要的错误。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值