import cv2import osimport numpy as npimport mindsporenn as nnfrom mindsporetraincallback import LossMonitorfrom scipy import ndimagefrom sklearnmodel_selection import train_test_split # 数据集划分import mi
如果要加载预训练模型,则需要在建立模型时指定预训练模型的路径,并使用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函数将参数加载到模型中。注意,预训练模型的网络结构需要和当前模型保持一致。
原文地址: https://www.cveoy.top/t/topic/bnhQ 著作权归作者所有。请勿转载和采集!