利用Paddle2.1高层API实现9种蘑菇的识别

本文围绕九种蘑菇的图像分类任务展开,采用卷积神经网络结构。先解压数据集并标注,划分出训练集与验证集,定义数据集类并做数据增强。接着选用mobilenet_v2网络,配置优化器等,经100轮训练,通过回调函数保存最佳模型,最后存储模型以备后续评估测试。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

利用paddle2.1高层api实现9种蘑菇的识别 - 创想鸟

① 问题定义

九种蘑菇的分类的本质是图像分类任务,采用卷积审计网络网络结构进行相关实践。

② 数据准备

2.1 解压缩数据集

我们将网上获取的数据集以压缩包的方式上传到aistudio数据集中,并加载到我们的项目内。

在使用之前我们进行数据集压缩包的一个解压。

In [1]

!unzip -oq /home/aistudio/data/data82495/mushrooms_train.zip -d work/

   

2.2 数据标注

我们先看一下解压缩后的数据集长成什么样子。

In [1]

import paddlepaddle.seed(8888)import numpy as npfrom typing import Callable#参数配置config_parameters = {    "class_dim": 9,  #分类数    "target_path":"/home/aistudio/work/",                         'train_image_dir': '/home/aistudio/work/trainImages',    'eval_image_dir': '/home/aistudio/work/evalImages',    'epochs':100,    'batch_size': 128,    'lr': 0.01}

   In [3]

import osimport randomfrom matplotlib import pyplot as pltfrom PIL import Imageimgs = []paths = os.listdir('work/mushrooms_train')for path in paths:       img_path = os.path.join('work/mushrooms_train', path)    if os.path.isdir(img_path):        img_paths = os.listdir(img_path)        img = Image.open(os.path.join(img_path, random.choice(img_paths)))        imgs.append((img, path))f, ax = plt.subplots(3, 3, figsize=(12,12))for i, img in enumerate(imgs[:9]):    ax[i//3, i%3].imshow(img[0])    ax[i//3, i%3].axis('off')    ax[i//3, i%3].set_title('label: %s' % img[1])plt.show()

       

               

2.3 划分数据集与数据集的定义

接下来我们使用标注好的文件进行数据集类的定义,方便后续模型训练使用。

2.3.1 划分数据集

In [3]

import osimport shutiltrain_dir = config_parameters['train_image_dir']eval_dir = config_parameters['eval_image_dir']paths = os.listdir('work/mushrooms_train')if not os.path.exists(train_dir):    os.mkdir(train_dir)if not os.path.exists(eval_dir):    os.mkdir(eval_dir)for path in paths:    imgs_dir = os.listdir(os.path.join('work/mushrooms_train', path))    target_train_dir = os.path.join(train_dir,path)    target_eval_dir = os.path.join(eval_dir,path)    if not os.path.exists(target_train_dir):        os.mkdir(target_train_dir)    if not os.path.exists(target_eval_dir):        os.mkdir(target_eval_dir)    for i in range(len(imgs_dir)):        if ' ' in imgs_dir[i]:            new_name = imgs_dir[i].replace(' ', '_')        else:            new_name = imgs_dir[i]        target_train_path = os.path.join(target_train_dir, new_name)        target_eval_path = os.path.join(target_eval_dir, new_name)             if i % 5 == 0:            shutil.copyfile(os.path.join(os.path.join('work/mushrooms_train', path), imgs_dir[i]), target_eval_path)        else:            shutil.copyfile(os.path.join(os.path.join('work/mushrooms_train', path), imgs_dir[i]), target_train_path)print('finished train val split!')

       

finished train val split!

       

2.3.2 导入数据集的定义实现

In [4]

#数据集的定义class TowerDataset(paddle.io.Dataset):    """    步骤一:继承paddle.io.Dataset类    """    def __init__(self, transforms: Callable, mode: str ='train'):        """        步骤二:实现构造函数,定义数据读取方式        """        super(TowerDataset, self).__init__()                self.mode = mode        self.transforms = transforms        train_image_dir = config_parameters['train_image_dir']        eval_image_dir = config_parameters['eval_image_dir']        train_data_folder = paddle.vision.DatasetFolder(train_image_dir)        eval_data_folder = paddle.vision.DatasetFolder(eval_image_dir)                if self.mode  == 'train':            self.data = train_data_folder        elif self.mode  == 'eval':            self.data = eval_data_folder    def __getitem__(self, index):        """        步骤三:实现__getitem__方法,定义指定index时如何获取数据,并返回单条数据(训练数据,对应的标签)        """        data = np.array(self.data[index][0]).astype('float32')        data = self.transforms(data)        label = np.array([self.data[index][1]]).astype('int64')                return data, label            def __len__(self):        """        步骤四:实现__len__方法,返回数据集总数目        """        return len(self.data)

   In [5]

from paddle.vision import transforms as T#数据增强transform_train =T.Compose([T.Resize((256,256)),                            T.RandomHorizontalFlip(5),                            T.RandomRotation(15),                            T.Transpose(),                            T.Normalize(mean=[0, 0, 0],                           # 像素值归一化                                        std =[255, 255, 255]),                    # transforms.ToTensor(), # transpose操作 + (img / 255),并且数据结构变为PaddleTensor                            T.Normalize(mean=[0.50950350, 0.54632660, 0.57409690],# 减均值 除标准差                                            std= [0.26059777, 0.26041326, 0.29220656])# 计算过程:output[channel] = (input[channel] - mean[channel]) / std[channel]                            ])transform_eval =T.Compose([ T.Resize((256,256)),                            T.Transpose(),                            T.Normalize(mean=[0, 0, 0],                           # 像素值归一化                                        std =[255, 255, 255]),                    # transforms.ToTensor(), # transpose操作 + (img / 255),并且数据结构变为PaddleTensor                            T.Normalize(mean=[0.50950350, 0.54632660, 0.57409690],# 减均值 除标准差                                            std= [0.26059777, 0.26041326, 0.29220656])# 计算过程:output[channel] = (input[channel] - mean[channel]) / std[channel]                            ])

   In [6]

train_dataset = TowerDataset(mode='train',transforms=transform_train)eval_dataset  = TowerDataset(mode='eval', transforms=transform_eval )#数据异步加载train_loader = paddle.io.DataLoader(train_dataset,                                     places=paddle.CUDAPlace(0),                                     batch_size=128,                                     shuffle=True,                                    #num_workers=2,                                    #use_shared_memory=True                                    )eval_loader = paddle.io.DataLoader (eval_dataset,                                     places=paddle.CUDAPlace(0),                                     batch_size=128,                                    #num_workers=2,                                    #use_shared_memory=True                                    )

   

2.3.3 实例化数据集类

根据所使用的数据集需求实例化数据集类,并查看总样本量。

In [7]

print('训练集样本量: {},验证集样本量: {}'.format(len(train_loader), len(eval_loader)))

       

训练集样本量: 42,验证集样本量: 11

       

③ 模型选择和开发

3.1 网络构建

本次我们使用mobilenet_v2网络来完成我们的案例实践。

In [11]

import paddlefrom paddle.vision.models import mobilenet_v2network=paddle.vision.models.mobilenet_v2(pretrained=True,num_classes=9)model=paddle.Model(network)

       

2021-04-20 04:52:16,152 - INFO - unique_endpoints {''}2021-04-20 04:52:16,153 - INFO - File /home/aistudio/.cache/paddle/hapi/weights/mobilenet_v2_x1.0.pdparams md5 checking...2021-04-20 04:52:16,203 - INFO - Found /home/aistudio/.cache/paddle/hapi/weights/mobilenet_v2_x1.0.pdparams/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1303: UserWarning: Skip loading for classifier.1.weight. classifier.1.weight receives a shape [1280, 1000], but the expected shape is [1280, 9].  warnings.warn(("Skip loading for {}. ".format(key) + str(err)))/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1303: UserWarning: Skip loading for classifier.1.bias. classifier.1.bias receives a shape [1000], but the expected shape is [9].  warnings.warn(("Skip loading for {}. ".format(key) + str(err)))

       

④ 模型训练和优化器的选择

In [12]

#优化器选择class SaveBestModel(paddle.callbacks.Callback):    def __init__(self, target=0.5, path='work/best_model', verbose=0):        self.target = target        self.epoch = None        self.path = path    def on_epoch_end(self, epoch, logs=None):        self.epoch = epoch    def on_eval_end(self, logs=None):        if logs.get('acc') > self.target:            self.target = logs.get('acc')            self.model.save(self.path)            print('best acc is {} at epoch {}'.format(self.target, self.epoch))callback_visualdl = paddle.callbacks.VisualDL(log_dir='work/mushroom')callback_savebestmodel = SaveBestModel(target=0.5, path='work/best_model')callbacks = [callback_visualdl, callback_savebestmodel]base_lr = config_parameters['lr']epochs = config_parameters['epochs']def make_optimizer(parameters=None):    momentum = 0.9    learning_rate= paddle.optimizer.lr.CosineAnnealingDecay(learning_rate=base_lr, T_max=epochs, verbose=False)    weight_decay=paddle.regularizer.L2Decay(0.01)    optimizer = paddle.optimizer.Momentum(        learning_rate=learning_rate,        momentum=momentum,        weight_decay=weight_decay,        parameters=parameters)    return optimizeroptimizer = make_optimizer(model.parameters())model.prepare(optimizer,              paddle.nn.CrossEntropyLoss(),              paddle.metric.Accuracy())

   In [13]

model.fit(train_loader,          eval_loader,          epochs=100,          batch_size=128,             callbacks=callbacks,           verbose=1)   # 日志展示格式

   

⑤模型训练效果展示

利用Paddle2.1高层API实现9种蘑菇的识别 - 创想鸟        

⑥模型存储

将我们训练得到的模型进行保存,以便后续评估和测试使用。

In [14]

model.save(get('model_save_dir'))

   

以上就是利用Paddle2.1高层API实现9种蘑菇的识别的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/52021.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 01:51:52
下一篇 2025年11月9日 01:56:13

相关推荐

  • 币圈数字货币交易所前十强排名 最新2025虚拟货币交易平台TOP10

    在全球数字资产快速发展的背景下,选择一个安全、高效、功能全面的数字货币交易平台,对于加密爱好者和专业交易者来说至关重要。面对市场上众多的交易平台,了解其在全球范围内的影响力、交易量、用户基础以及提供的服务种类,能够帮助用户做出更明智的决策。以下是基于多方面因素考量,列出的当前市场中具有较高知名度和影…

    2025年12月8日 好文分享
    000
  • HEDERA,非洲和黑客马拉松:建立Web3的未来

    探索hedera africa hackathon 2025的重点,揭示非洲由hedera驱动的解决方案和web3开发的崛起。 嘿,看看这个——Africa正在迅速成为Web3创新的重要中心,而Hedera正巧站在浪潮之巅。随着Hedera Africa Hackathon 2025日益临近,现在是…

    2025年12月8日
    000
  • 炒数字货币平台最新排行榜top10

    进入风起云涌的数字货币世界,选择一个得心应手的交易平台,就如同航海家拥有了一艘坚固可靠的船只。这个选择直接关系到您的资产安全、交易效率以及最终的投资回报。市场上平台林立,功能各异,从交易深度、手续费率到用户体验、客服响应,每一个细节都可能成为影响交易成败的关键。对于新手而言,一个界面友好、指引清晰的…

    2025年12月8日 好文分享
    000
  • Bi安平台如何存款和取款?币安平台充值和提现加密货币图文教程

    币安是一个提供多种加密货币交易服务的全球领先平台,具有高安全性、流动性及用户友好界面。其充值步骤为:1.登录账户;2.进入“充值”页面选择币种;3.选择与转出方一致的充值网络;4.获取并正确粘贴充值地址;5.确认转账并等待到账。提现流程包括:1.登录账户;2.进入“提现”页面选择币种;3.填写正确地…

    2025年12月8日
    000
  • 欧易OKX里面的rsi对交易有什么参考价值

    欧易OKX里面的RSI对交易有什么参考价值 “欧易okx里面的rsi对交易有什么参考价值”这一疑问,直指相对强弱指数(rsi)在数字资产交易平台欧易okx上的实际应用效能。rsi作为一种技术分析工具,旨在衡量市场买卖双方力量的平衡,并以此判断资产价格动量及潜在的转折点。它并非简单的买入卖出信号,而是…

    好文分享 2025年12月8日
    000
  • 数字货币好用的交易平台 炒币好用的货币交易平台

    基于上述多重考量,结合全球用户口碑、市场影响力、安全记录以及产品创新能力,以下是当前市场上备受推荐的数字货币交易平台排名。请注意,加密货币市场发展迅速,平台表现可能动态变化,此排名仅供参考,请以您自身需求为准。 第1名:Binance (币安) Binance作为全球领先的加密货币交易平台,以其庞大…

    2025年12月8日 好文分享
    000
  • Magacoin Finance:Q3 2025起飞的加密货币预售

    随着q3 2025的临近,magacoin finance正掀起一股热潮。了解为何分析师将其预售视为潜在爆发增长的机会。 随着2025年第三季度的临近,加密市场对一些早期项目充满了期待,而这些项目被认为具有巨大潜力。在众多项目中,Magacoin Finance逐渐崭露头角,吸引了资深分析人士和散户…

    2025年12月8日
    000
  • 欧易OKX里面的avl是什么意思?对交易有什么参考价值

    欧易OKX中的“AVL”解析与参考价值 在数字资产交易平台欧易okx上,用户界面中常会看到“avl”这一缩写。它并非一个复杂的专业术语,也与抽象的金融概念无关,而是指用户账户中“可用余额”(available balance)。这个数值直观地显示了您的数字资产中,有多少是当前可以自由支配、用于交易、…

    好文分享 2025年12月8日
    000
  • 币安交易所官方入口网址 币安官网链接2025

    币安交易所是全球领先的数字资产交易平台,以安全性高、交易品种丰富、操作便捷著称,并构建了涵盖交易、教育、公益、区块链开发等多领域的生态系统。其成功源于深刻理解用户需求和行业趋势,持续优化服务,拓展创新业务如币安链、币安智能链等。为确保访问安全,请1.验证域名;2.检查SSL证书;3.使用书签;4.避…

    2025年12月8日
    000
  • 币安交易所官方入口网址 币安官网链接最新版

    币安是全球领先的加密货币交易平台,其优势包括1.强大的安全性保障,2.丰富的交易品种选择,3.流畅的用户体验,4.创新的金融服务,5.专业的客户服务;用户可通过官方入口网址安全访问平台;为开始币安之旅,需1.访问官方网站,2.注册账户,3.完成身份验证(KYC),4.设置安全措施,5.开始交易;币安…

    2025年12月8日
    000
  • 全球三大交易所排名 虚拟币交易所推荐

    2025年最新虚拟货币交易平台排行榜Top 10包括Binance、OKX、gate.io、火币、Coinbase、Kraken、Bybit、KuCoin、Bitfinex和Crypto.com。 随着虚拟货币市场的持续演进和用户需求的不断变化,选择一个安全、可靠且功能强大的交易平台至关重要。202…

    2025年12月8日
    000
  • 全球币圈最好用的交易所排名(2025)

    2025年全球前十虚拟货币交易平台依次为Binance、OKX、gate.io、火币、Coinbase、Kraken、Bybit、KuCoin、Bitget和Crypto.com。 数字资产交易平台是全球数字货币市场不可或缺的组成部分。随着市场的演变和技术的迭代,交易平台在安全性、流动性、用户体验和…

    2025年12月8日
    000
  • Pepe硬币与Ozak AI:在模因硬币Frenzy中长期赌注

    导航模因币市场?将pepe的炒作驱动波动与ozak ai的长期潜力对比。精明投资者指南。 Pepe币与Ozak AI:在模因币热潮中押注未来 加密货币世界正掀起波澜!Pepe币因其网络迷因文化而迅速走红,而Ozak AI则凭借人工智能和实际应用,悄然构建其长期价值基础。 Pepe币:追逐模因狂潮,还…

    2025年12月8日
    000
  • Anthony Pompliano的Procap:比特币财政部SPAC交易重新定义融资

    anthony pompliano旗下的procap financial通过与一家spac合并,计划打造一个基于比特币资产负债表的全方位服务金融机构,并获得了10亿美元资金支持。 想象这样一个华尔街:以比特币为动力。这就是Anthony Pompliano带来的全新项目——Procap Financ…

    2025年12月8日
    000
  • Shiba Inu,Pepe Coin和Penny Coins:加密丛林中的嗡嗡声是什么?

    潜入模因币与低价加密货币的世界,如什巴·伊努(shiba inu)、佩佩(pepe)和小佩佩(little pepe),探索最新的趋势、深度洞察以及潜在的替代投资选择。 Shiba Inu、Pepe Coin 与 Penny Coins:加密丛林中的热门话题是什么? 加密市场始终充满不确定性。在主流…

    2025年12月8日
    000
  • Méliuz,Bitcoin和Latin America:令人惊讶的强力球员

    巴西金融科技méliuz崛起为拉丁美洲最大的比特币持有者,而dogecoin正瞄准通过x支付实现主流应用。 金融科技、加密货币与拉美市场的交汇点正变得愈发火热!巴西公司Méliuz正在掀起波澜,而Dogecoin则有望融入X的支付体系。 Méliuz:拉丁美洲的比特币巨头 巴西金融科技企业Méliu…

    2025年12月8日
    000
  • Crypto,2025年,Web3 AI:什么是热,什么不是?

    以下是你要求的伪原创内容,保持了原文的大意,并保留了图片的位置: 深入探索2025年的加密货币发展趋势,聚焦于Web3 AI这一核心领域。在这一迅速演化的生态系统中,我们将揭示领先的项目、关键洞察以及潜在的投资机遇。 到了2025年,加密市场活力四射,Web3 AI正引领这股浪潮。让我们一起梳理当前…

    2025年12月8日
    000
  • DeLorean(DMC)是什么?怎么样?币安即将上线项目DeLorean(DMC)全面介绍

    加密货币世界充满令人兴奋的时刻!最新信息显示,全球最大的加密货币交易所binance 将向用户介绍名为 delorean (dmc) 的山寨币,既包括期货也包括 binance alpha 预上市平台。此举意味着 dmc ,delorean labs 的代币,将迎来一次重大飞跃。 什么是 DeLor…

    2025年12月8日
    000
  • RESOLV 加密代币是什么?如何工作?功能、未来价格介绍

    稳定币旨在为动荡的加密货币世界提供稳定性,但许多稳定币本身也存在一些问题。以法币支持的稳定币为例——它们承诺与美元 1:1 挂钩,因为它们持有现实世界资产(rwa)、实际现金或现金等价物作为抵押品。问题是什么?你必须相信这些中心化公司确实将资金存放在传统金融基础设施中,不会冻结或丢失。这是一种链下风…

    2025年12月8日
    000
  • Polyhedra Network(ZKJ)前景如何?ZKJ价格预测2025-2030

    ‍ polyhedra network (zkj) 正在区块链世界中找到自己的定位,通过改善 web2 和 web3 环境之间的双向互操作性和计算性能。它拥有尖端技术,如 zkbridge 和 expchain,这使其成为零知识证明应用领域的潜在领导者。随着加密货币市场的发展,投资者热衷于了解该加密…

    2025年12月8日 好文分享
    000

发表回复

登录后才能评论
关注微信