如果要加载预训练模型,则需要在建立模型时指定预训练模型的路径,并使用load_checkpoint函数加载权重参数。示例代码如下:

from mindspore.train.serialization import load_checkpoint

if __name__ == "__main__":
        faces, labels = prepare_training_data("allraw")
        train_input, valid_input, train_output, valid_output = train_test_split(faces, labels,
                                                                                test_size=0.3)  # 划分数据,训练集测试集7:3

        # 数据归一化
        train_input /= 255.0
        valid_input /= 255.0
        train_input = train_input.reshape((-1, 1, train_input.shape[1], train_input.shape[2]))
        valid_input = valid_input.reshape((-1, 1, valid_input.shape[1], valid_input.shape[2]))
        # 转换数据格式----------------------------------------------------------------------------
        # 训练集
        train_data = (train_input, train_output)
        train_data = ds.NumpySlicesDataset(train_data)

        # 测试集
        test_data = (valid_input, valid_output)
        test_data = ds.NumpySlicesDataset(test_data)

        # 批处理
        test_data = test_data.batch(32)
        train_data = train_data.batch(32)
        net = ResNet(ResidualBlock,[2,2,2,2])

        # 损失函数
        net_loss = SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')  # sparse,输出不是one hot编码时设为Ture

        # 优化器
        lr = 0.001  # 学习率
        momentum = 0.9  # 动量
        net_opt = nn.Momentum(net.trainable_params(), lr, momentum)

        # 加载预训练模型
        ckpt_path = "resnet.ckpt"
        param_dict = load_checkpoint(ckpt_path)
        load_param_into_net(net, param_dict)

        # 模型
        model = Model(net, net_loss, net_opt, metrics={"accuracy": Accuracy()})
        # 设定loss监控
        loss_cb = LossMonitor(per_print_times=train_data.get_dataset_size())
        # ----------------------------------------------------------------------------
        # 训练模型
        model.train(30, train_data, loss_cb)
        # 用测试集评估模型的准确率
        print(model.eval(test_data))

其中,ckpt_path指定预训练模型的路径,param_dict = load_checkpoint(ckpt_path)加载模型的权重参数,然后使用load_param_into_net函数将参数加载到模型中。注意,预训练模型的网络结构需要和当前模型保持一致。

import cv2import osimport numpy as npimport mindsporenn as nnfrom mindsporetraincallback import LossMonitorfrom scipy import ndimagefrom sklearnmodel_selection import train_test_split # 数据集划分import mi

原文地址: https://www.cveoy.top/t/topic/bnhQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录