基于MindSpore的图像分类迁移学习

转载地址:https://bbs.huaweicloud.com/forum/thread-144350-1-1.html

作者:李响

邮箱:chaojililin@163.com

基于MindSpore1.3.0的图像分类迁移学习

本人基于MindSpore1.3.0版本开发图像分类迁移学习(下面是关键步骤的解释说明,具体代码见附件)

导入模块:

import collections
import json
import hashlib
import logging
import os.path
import re
import shutil
import getopt
from datetime import datetime
from PIL import Image
from os.path import getsize, join

import os
import argparse
import random
import numpy as np
import sys, stat

from mindspore import context
from mindspore import Tensor, Parameter
from mindspore import nn
from mindspore.nn.loss import SoftmaxCrossEntropyWithLogits
from mindspore.nn.loss.loss import _Loss
from mindspore.ops import operations as P
from mindspore.ops import functional as F
from mindspore.common import dtype as mstype
from mindspore.train.model import Model
from mindspore.train.serialization import load_checkpoint, load_param_into_net, save_checkpoint,  export
import mindspore.dataset.engine as de

from dataset import create_dataset
from mobilenetV2 import MobileNetV2, Head, MobileNetV2Classification

from easydict import EasyDict as ed

from automl import EarlyStopValAcc, BestAccSaver, TrainAccUpdater, ValControl

数据集,自行准备,结构目录如下,imgs是根目录,car/animal/flower/person/plane/ship是第一层目录,在第一层目录下就是具体的jpg或者png图片;

imgs----car

       ----animal

       ----flower

       ----person

       ----plane

       ----ship

定义损失函数:

loss = SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')

opt = nn.Adam(filter(lambda x: x.requires_grad, head.get_parameters()), os.modelinf["learning_rate"])

定义模型:

backbone = MobileNetV2(platform="CPU")
transpose_D2GPU(backbone, os.path.join(os.modelinf["model_dir"], "mobilenetV2.ckpt"))
net = MobileNetV2Classification(backbone, head)

model = Model(head, loss_fn=loss, optimizer=opt)
network = model._train_network
network.set_train()

eval_model = Model(net, loss_fn=loss, metrics= {"acc"})

index_list = list(range(step_size))
if not os.path.exists(config_cpu.save_checkpoint_path):
    os.mkdir(config_cpu.save_checkpoint_path)

train_features = np.load(os.path.join(data_path, f"train_feature.npy"))
train_labels = np.load(os.path.join(data_path, f"train_label.npy"))

train_acc_updater = TrainAccUpdater()  # 用于更新训练精度计算的统计器
best_acc_saver = BestAccSaver(FLAGS, net)

转mindir格式:

input_np = np.random.uniform(0.0, 1.0, size=[1, 3, 224, 224]).astype(np.float32)
net.set_train(mode=False)
export(net, Tensor(input_np), file_name="./mindspore", file_format='MINDIR')
command = r'call modelConvertMindspore\converter_lite.exe --fmk=MINDIR --modelFile=' + './mindspore.mindir' + ' --outputFile=' + './mindspore'
os.system(command)
os.remove(os.path.abspath("./mindspore.mindir"))

保存模型:

if os.path.exists(os.modelinf["mindspore_output_graph"]):
    os.chmod(os.modelinf["mindspore_output_graph"], stat.S_IRWXU)
    os.remove(os.modelinf["mindspore_output_graph"])
os.chmod('./mindspore.ms', stat.S_IRWXU)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
矿物图像分类是指通过对矿物样本图像进行分析和识别,将其归类到不同的矿物类别中。迁移学习是一种机器学习方法,它通过将已经在一个任务上训练好的模型应用到另一个相关任务上,以提高新任务的性能。 在矿物图像分类中,迁移学习可以帮助解决以下问题: 1. 数据不足:矿物图像数据集可能相对较小,迁移学习可以利用在大规模图像数据集上预训练的模型,将其特征提取能力迁移到矿物图像分类任务中。 2. 特征提取:预训练的模型已经学习到了一些通用的特征表示,可以通过迁移学习将这些特征应用到矿物图像分类任务中,从而减少特征提取的工作量。 3. 避免过拟合:通过迁移学习,可以利用预训练模型的参数初始化分类器,从而避免在小样本数据集上过拟合的问题。 具体实施矿物图像分类迁移学习的步骤如下: 1. 选择预训练模型:选择一个在大规模图像数据集上预训练好的模型,如VGG、ResNet等。 2. 冻结模型参数:将预训练模型的参数固定住,只训练分类器部分的参数。 3. 替换分类器:将预训练模型的最后一层或几层替换为适合矿物图像分类任务的新的全连接层。 4. 训练分类器:在矿物图像数据集上训练分类器,同时保持预训练模型的参数不变。 5. 微调模型:解冻预训练模型的部分参数,允许其在矿物图像数据集上微调,以进一步提高性能。 6. 评估和调优:使用验证集对模型进行评估,并根据评估结果进行调优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值