【chainer速成】chainer图像分类从模型自定义到测试

Python实现的Chainer多人实时姿态估计项目 本文还有配套的精品资源,点击获取 简介:在计算机视觉和人工智能领域,实时多人姿态估计是识别和追踪视频中多人关键关节位置的重要技术。本项目展示了如何利用Python语言和Chainer深度学习框架来实现这一功能。Chainer允许在运行时构建和修改计算图,非常适合动态模型的处理。多人姿态估计算法通常结合CNNs和RNNs来完成,有时也会使用GNNs。项目提供了数据集、预训练模... 阅读详情

文章首发于微信公众号《有三AI》

【chainer速成】chainer图像分类从模型自定义到测试

欢迎来到专栏《2小时玩转开源框架系列》,这是我们第八篇,前面已经说过了caffe,tensorflow,pytorch,mxnet,keras,paddlepaddle,cntk。

今天说chainer,本文所用到的数据,代码请参考我们官方git

https://github.com/longpeng2008/LongPeng_ML_Course

作者&编辑 | 汤兴旺  

 

01 chainer是什么

chainer是一个基于python的深度学习框架,能够轻松直观地编写复杂的神经网络架构。

当前大多数深度学习框架都基于“Define-and-Run”方案。也就是说,首先定义网络,然后用户定期向其提供小批量的训练数据。由于网络静态定义的,因此所有的逻辑必须作为数据嵌入到网络架构中。

相反,chainer采用“Define-by-Run”方案,即通过实际的前向计算动态定义网络。更确切地说,chainer存储计算历史而不是编程逻辑。这样,Chainer不需要将条件和循环引入网络定义 。chainer的核心理念就是Define-by-Run。

 

02 chainer训练准备

2.1 chainer安装

chainer安装很简单,只需要在终端输入下面命令即可安装:

pip install chainer

2.2 数据读取

在chainer中读取数据是非常简单的。数据读取部分的代码如下:

import numpy as np

import os

from PIL import Image

import glob

from chainer.datasets import tuple_dataset

class Dataset():

    def __init__(self, path, width=60, height=60):

        channels = 3

        path = glob.glob('./mouth/*')

        pathsAndLabels = []

        index = 0

        for p in path:

            print(p + "," + str(index))

            pathsAndLabels.append(np.asarray([p, index]))

            index = index + 1

        allData = []

        for pathAndLabel in pathsAndLabels:

            path = pathAndLabel[0]

            label = pathAndLabel[1]

            imagelist = glob.glob(path + "/*")

            for imgName in imagelist:

                allData.append([imgName, label])

        allData = np.random.permutation(allData)

        imageData = []

        labelData = []

下面解释下在chainer中读取数据的一些特色,完整代码请移步github。

在chainer中我们通过chainer.datasets模块来获取数据集,其最基本的数据集就是一个数组,平时最常见的NumPy和CuPy数组都可以直接用作数据集。在本实例中我们采用的是元组数据集即TupleDataset()来获取数据。

2.3 网络定义

它的网络定义和pytorch基本上是相似的,如下:

class MyModel(Chain):

    def __init__(self):

        super(MyModel, self).__init__()

        with self.init_scope():

            self.conv1 = L.Convolution2D(

                   in_channels=3, out_channels=12, ksize=3, stride=2)

            self.bn1 = L.BatchNormalization(12)

            self.conv2 = L.Convolution2D(

                   in_channels=12, out_channels=24, ksize=3, stride=2)

            self.bn2 = L.BatchNormalization(24)

            self.conv3 = L.Convolution2D(

                   in_channels=24, out_channels=48, ksize=3, stride=2)

            self.bn3 = L.BatchNormalization(48)

            self.fc1 = L.Linear(None, 1200)

            self.fc2 = L.Linear(1200, 128)

            self.fc3 = L.Linear(128, 2)

    def __call__(self,x):

        return self.forward(x)

    def forward(self, x):

        h1 = F.relu(self.conv1(x))

        h2 = F.relu(self.conv2(h1))

        h3 = F.relu(self.conv3(h2))

        h4 = F.relu(self.fc1(h3))

        h5 = F.relu(self.fc2(h4))

        x = self.fc3(h5)

        return (x)

上面的例子和之前说过的caffe、tensorflow、pytorch等框架采用的网络结构是一样。这里不在赘述,我具体说下这个框架的特色。

(1) MyModel(Chain)

Chain在chainer中是一个定义模型的类,我们把模型MyModel定义为Chain的子类,即继承Chain这个类,这和Pytorch中的nn.module类似。以后我们在模型定义时都可以通过Chain来构建具有潜在深层功能和链接层次的模型。

(2) Link和Function

在Chainer中,神经网络的每一层都可以认为是由两种广泛类型的函数之一组成即Link和Function。

其中Function是一个没有可学习参数的函数,而LInk是包括参数的,我们也能把Link理解成一个赋予其参数的Function。

在我们使用它之前,我们首先需要导入相应的模块,如下:

import chainer.links as L
import chainer.functions as F

另外在平时使用时我们喜欢用L替代Link,用F代替Function。如L.Convolution2D和F.relu

(3) __call__

对于__call__它的作用就是使我们的chain像一个函数一样容易被调用。

 

03 模型训练

数据加载和网络定义好后,我们就可以进行模型训练了,话不多说,我们直接上代码。

model = L.Classifier(MyModel())

if os.path.isfile('./dataset.pickle'):

    print("dataset.pickle is exist. loading...")

    with open('./dataset.pickle', mode='rb') as f:

        train, test = pickle.load(f)

        print("Loaded")

    else:

        datasets = dataset.Dataset("mouth")

        train, test = datasets.get_dataset()

        with open('./dataset.pickle', mode='wb') as f:

            pickle.dump((train, test), f)

            print("saving train and test...")

    optimizer = optimizers.MomentumSGD(lr=0.001, momentum=0.5)

    optimizer.setup(model)

    train_iter = iterators.SerialIterator(train, 64)

    test_iter = iterators.SerialIterator(test, 64, repeat=False, shuffle=True)

    updater = training.StandardUpdater(train_iter, optimizer, device=-1)

    trainer = training.Trainer(updater, (800, 'epoch'),        out='{}_model_result'.format(MyModel.__class__.__name__))

在chainer中,模型训练可以分为如下6个步骤,个人认为这6个步骤是非常好理解的。

Step-01-Dataset

第一步当然就是加载我们的数据集了,我们通常都是通过下面方法加载数据集:

train, test = datasets.get_dataset()

Step-02-Iterator

chainer提供了一些Iterator,通常我们采用下面的方法来从数据集中获取小批量的数据进行迭代。

train_iter = iterators.SerialIterator(train, batchsize)
test_iter = iterators.SerialIterator(test, batchsize, repeat=False, shuffle=True)

Step-03-Model

在chainer中chainer.links.Classifier是一个简单的分类器模型,尽管它里面有许多参数如predictor、lossfun和accfun,但我们只需赋予其一个参数那就是predictor,即你定义过的模型。

model = L.Classifier(MyModel())

Step-04-Optimizer

模型弄好后,接下来当然是优化了,在chainer.optimizers中有许多我们常见的优化器,部分优化器如下:

1、chainer.optimizers.AdaDelta

2、chainer.optimizers.AdaGrad

3、chainer.optimizers.AdaDelta  

4、chainer.optimizers.AdaGrad    

5、chainer.optimizers.Adam  

6、chainer.optimizers.CorrectedMomentumSGD   .    

7、chainer.optimizers.MomentumSGD   

8、chainer.optimizers.NesterovAG  

9、chainer.optimizers.RMSprop   

10、chainer.optimizers.RMSpropGraves   

...

Step-05-Updater

当我们想要训练神经网络时,我们必须运行多次更新参数,这在chainer中就是Updater所做的工作,在本例我们使用的是 training.StandardUpdater。

Step-06-Trainer

上面的工作做完之后我们需要做的就是训练了。在chainer中,训练模型采用的是 training.Trainer()。

 

04 可视化

trainer.extend(extensions.dump_graph("main/loss"))

trainer.extend(extensions.Evaluator(test_iter, model, device=-1))

trainer.extend(extensions.LogReport())

trainer.extend(extensions.PrintReport( ['epoch', 'main/loss', 'validation/main/loss', 'main/accuracy', 'validation/main/accuracy']))

trainer.extend(extensions.PlotReport(['main/loss', 'validation/main/loss'], x_key='epoch', file_name='loss.png'))

trainer.extend(extensions.PlotReport(['main/accuracy', 'validation/main/accuracy'], x_key='epoch', file_name='accuracy.png'))

trainer.extend(extensions.ProgressBar())

在chainer中可视化是非常方便的,我们常通过trainer.extend()来实现我们的可视化,其有下面几种可视化的方式。

1、chainer.training.extensions.PrintReport    

2、chainer.training.extensions.ProgressBar   

3、chainer.training.extensions.LogReport    

4、chainer.training.extensions.PlotReport   

5、chainer.training.extensions.VariableStatisticsPlot  

6、chainer.training.extensions.dump_graph    

以上就是利用chain来做一个图像分类任务的一个小例子。完整代码可以看配套的git项目,我们看看训练中的记录,如下:

 

总结

本文讲解了如何使用chainer深度学习框架完成一个分类任务,尽管这个框架用的人不多,但这个框架使用起来还是比较方便的,您在用吗?如果您在用,可以联系我们一起交流下!

 

转载文章请后台联系

侵权必究

本系列完整文章:

第一篇:【caffe速成】caffe图像分类从模型自定义到测试

第二篇:【tensorflow速成】Tensorflow图像分类从模型自定义到测试

第三篇:【pytorch速成】Pytorch图像分类从模型自定义到测试

第四篇:【paddlepaddle速成】paddlepaddle图像分类从模型自定义到测试

第五篇:【Keras速成】Keras图像分类从模型自定义到测试

第六篇:【mxnet速成】mxnet图像分类从模型自定义到测试

第七篇:【cntk速成】cntk图像分类从模型自定义到测试

第八篇:【chainer速成】chainer图像分类从模型自定义到测试

第九篇:【DL4J速成】Deeplearning4j图像分类从模型自定义到测试

第十篇:【MatConvnet速成】MatConvnet图像分类从模型自定义到测试

第十一篇:【Lasagne速成】Lasagne/Theano图像分类从模型自定义到测试

第十二篇:【darknet速成】Darknet图像分类从模型自定义到测试

感谢各位看官的耐心阅读,不足之处希望多多指教。后续内容将会不定期奉上,欢迎大家关注有三公众号 有三AI!

C# OpenCvSharp4实战:5分钟搞定工业视觉模板匹配(附完整代码) 本文为C#开发者提供了基于OpenCvSharp4的工业视觉模板匹配实战指南。通过详细的环境搭建、核心原理解析和完整代码示例,重点介绍了如何使用`matchTemplate`函数,特别是`CCoeffNormed`方法,快速实现高精度、抗光照变化的模板匹配,并分享了多目标匹配、图像预处理等工业级优化技巧。 阅读详情

相关推荐

初识Renode

1. 简介 Renode是Antmicro公司发布的一个开发框架,使得开发人员通过模拟物理硬件系统(包括CPU、外围设备、传感器、环境以及节点之间的有线或无线介质),加速物联网和嵌入式系统的开发。它可在PC上通过软件对嵌入式设备进行模拟,可模拟Cortex-M、Cortex-A、RISC-V和其他CPU,并可模拟外设以及各种通信总线和接口。其指令模拟器使用C语言开发,外设模拟器使用C#语言开发,测试及输出层面的内容则用python编写。 Renode官网:Renodehttps://renode.io/

牧羊女 5296

chainer入门

chainer

xiaoxiao1122334455的博客 2397

Shader Graph实战:5分钟搞定Flow Map水体流动效果(含UV偏移避坑指南)

本文详细解析了如何使用Unity的Shader Graph工具快速实现Flow Map水体流动效果,涵盖基础原理、核心节点搭建、高级技巧及性能优化。特别针对UV偏移问题提供避坑指南,帮助开发者轻松打造专业级动态水面效果,适合游戏场景增强视觉表现。

weixin_29250403的博客 246

机器学习框架Chainer学习

Chainer机器学习框架知识点学习

cocoink的博客 720

Trae IDE与Playwright MCP:5分钟实现零代码网页数据抓取

网页数据抓取是数据采集和自动化处理中的基础技术,其核心原理是通过程序模拟浏览器行为,定位并提取页面中的结构化信息。传统方式依赖编写脚本处理网络请求、解析HTML和应对反爬机制,技术门槛较高。而结合AI与自动化工具的新范式,通过自然语言交互即可完成复杂操作,极大降低了技术门槛并提升了开发效率。这种技术价值在于将开发者从繁琐的编码中解放,使其更专注于数据分析和业务逻辑。在数据监控、市场调研、竞品分析等应用场景中,快速获取网页数据是关键需求。本文以Trae IDE集成Playwright MCP为例,演示如何通过

culi3118的博客 499

人工势场法三大致命缺陷?我用ROS+Gazebo做了组对比实验

本文通过ROS与Gazebo仿真实验,深入剖析了人工势场法(APF)在机器人路径规划中的三大经典问题:局部最小值、目标不可达和路径震荡。文章不仅复现了这些缺陷,还对比测试了虚拟目标点法、改进斥力场及运动平滑等主流改进方案,为工程选型提供了基于数据的实用建议。

dapp9builder的博客 219

chainer的安装使用

Chainer是一个开源的深度学习框架学习步骤

ctu_sue的博客 2385

深入解析JESD204B Periodic SYSREF在多ADC/DAC系统中的同步优化策略

本文深入探讨了JESD204B Periodic SYSREF在多ADC/DAC系统中的同步优化策略,针对雷达阵列和宽带通信系统中的同步精度问题,详细解析了硬件实现细节、参数配置实战经验及系统级优化方法。通过案例分析和技术要点,帮助工程师解决由温度漂移和时钟抖动引起的同步挑战,提升系统性能。

weixin_29267307的博客 138

chainer-图像分类-整体结构设计【附源码】

本文章主要是基于chainer的图像分类的基本框架,下边的主要是开始对各个模型如何再次框架中应用起来并把结果展示出来。

ctu_sue的博客 1246

Python气象雷达数据处理实战:用PyCINRAD从基数据到PPI图的完整流程

本文详细介绍了使用PyCINRAD库处理气象雷达基数据并生成PPI图的完整流程,涵盖环境配置、数据读取、反射率与速度数据提取、可视化优化等关键步骤。通过实战案例演示如何从原始雷达数据到专业级PPI图像生成,为气象研究和业务应用提供高效解决方案。

yog99的博客 758

05 Transformer 到底解决了什么问题

Transformer 是现代大语言模型的底层骨架。本文不推公式,而是从 CNN、RNN/LSTM 的瓶颈讲起,解释 Transformer 如何通过自注意力同时解决长距离依赖和并行训练问题,并说明它为什么能支撑 GPT、BERT 和现代大模型的规模化。

老于的笔记的专栏 248

Chainer简介及安装

1、chainer简介 大家可能对Chainer这个词很陌生,但是如果说tensorflow,keras,caffe这些深度学习框架呢?是不是想起什么了,没错,就是你心里想的那样!Chainer诞生于2015年,于2016年转向开源正式进入公众视野,尽管其GitHub代码库非常活跃,但却并没能引起业界的应有重视。可这并不影响该框架的性能,英特尔公司就决定将Chainer作为一种理想的AI工作负载开...

XYKenny的博客 1万+

鸿蒙ArkUI内部API10以及11开发,输入框唤起输入法键盘,页面会被顶起的解决办法

鸿蒙ArkUI内部API10以及11开发,输入框唤起输入法键盘,页面会被顶起的解决办法

zmx781284440的博客 3215

【好专栏】深度学习框架不会用?12大主流深度学习框架快速入门,你值得拥有!...

欢迎来到【好专栏】,本次我们给大家推荐一个专栏,名为《12 大深度学习开源框架快速入门》,这个专栏为介绍了深度学习的 12 大主流框架,附带实践案例,能够让读者快速掌握深度学习框架的使用...

Leong Blog 516

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【通知】有三AI发布150页深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...

之前我们公众号输出了很多深度学习开源框架相关的内容,今天整理成技术手册给大家分享以方便阅读,下面是详细信息。开源框架背景现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的...

hacker_long的专栏 698

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Chainer深度学习框架快速入门指南

Chainer是一个基于Python的深度学习框架,以其独特的"Define by Run"(动态定义)特性而闻名。这个框架特别适合研究人员和开发者快速实现和测试新的神经网络架构。 ### Chainer的核心优势 1. **Python原生支持**:完全基于Python开发,可以直接在运行时检查和修改网络结构 2. **动态计算图**:网络在运行时动态构建,支持灵活的架构调整 3. **Nu...

gitblog_00005的博客 449

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习主流开源框架:Caffe、TensorFlow、Pytorch、Theano、Keras、MXNet、Chainer

深度学习主流开源框架:Caffe、TensorFlow、Pytorch、Theano、Keras、MXNet、Chainer

seasonsyy的博客 6412

Switch 19.0.1 刷大气层失败?Atmosphère 1.8.0 从预检到排错的完整实操教程

系统升到 19.0.1 之后,不少人的机器卡在黑屏或引导失败,也有人升级完发现崩溃报告生成变慢、特定内存条的机器开不了机。这篇针对 Atmosphère 1.8.0(对 19.0.x 提供基础支持的最新版本)写了一份从动手前检查到升级后维护的实操流程:预检清单、5 步安装、排错速查表、几个真正有用的配置项,照着做即可。 [![Atmosphère 大气层固件启动闪屏界面(1280x720)](h

gitblog_00075的博客 1064

为什么选择Chainer?5大理由让这个灵活深度学习框架脱颖而出

Chainer是一个基于Python的开源深度学习框架,以其独特的"Define-by-Run"(动态定义)方法而闻名。作为一款灵活强大的机器学习工具,Chainer让研究人员和开发者能够更直观地构建和训练神经网络模型。无论你是深度学习新手还是经验丰富的研究人员,Chainer都能为你提供无与伦比的开发体验。 ## 🎯 1. 独特的动态计算图设计 Chainer最大的优势在于其**动态计算图

gitblog_00897的博客 709

如何快速上手Chainer:深度学习框架的完整指南

Chainer是一个灵活强大的深度学习框架,专为神经网络设计,支持动态计算图和直观的模型构建方式。无论你是深度学习新手还是经验丰富的研究者,Chainer都能提供高效的开发体验。😊 ## 为什么选择Chainer框架? Chainer的核心优势在于其**动态计算图**设计,这使得模型的调试和修改变得异常简单。相比于其他静态图框架,Chainer允许你在运行时动态改变网络结构,这对于研究和实验

gitblog_01049的博客 960

如何实现多平台Charting Library集成:从Web到移动端的完整指南

Charting Library作为专业的金融图表解决方案,为开发者提供了跨平台集成的强大能力。无论您是在构建Web应用、移动App还是桌面软件,这份指南将帮助您快速掌握在不同技术栈中集成专业级图表的方法,解决数据可视化开发中的核心痛点。 ## 为什么您的项目需要Charting Library? 在当今数据驱动的商业环境中,实时、专业的图表展示已成为金融科技、电商分析、物联网监控等领域的标配

gitblog_00059的博客 641

Chainer 使复杂神经网络变的简单

Chainer是一个专门为高效研究和开发深度学习算法而设计的开源框架。 这篇博文会通过一些例子简要地介绍一下Chainer,同时把它与其他一些框架做比较,比如Caffe、Theano、Torch和Tensorflow。

OReillyData 7120

浅谈chainer框架

一 chainer基础 Chainer是一个专门为高效研究和开发深度学习算法而设计的开源框架。 这篇博文会通过一些例子简要地介绍一下Chainer,同时把它与其他一些框架做比较,比如Caffe、Theano、Torch和Tensorflow。 大多数现有的深度学习框架是在模型训练之前构建计算图。 这种方法是相当简单明了的,特别是对于结构固定且分层的神经网络(比如卷积神经网络)的实现。...

dfql83704的博客 2325

Sefirah:终极Phone Link/KDE Connect替代方案,让Windows与Android无缝协作

Sefirah是一款开源的跨设备协作工具,作为Phone Link和KDE Connect的强大替代方案,它能够让Windows电脑与Android设备实现无缝连接与高效协作。无论是文件传输、通知同步还是远程控制,Sefirah都提供了简单直观的解决方案,让多设备工作流更加顺畅。 [![Sefirah应用界面展示](https://raw.gitcode.com/gh_mirrors/se/Se

gitblog_00069的博客 1132

通勤路上只想听UP主原声:downkyicore 跨平台B站视频下载与音视频分离实战拆解

downkyicore 是一款基于 AvaloniaUI 的跨平台 B站视频下载工具,在解析下载之外还内置了音视频分离工具箱。这篇文章不打算按功能清单罗列,而是跟着一个真实场景走完全程:你在地铁上刷到一个 UP 主的视频,画面很普通,但背景配乐和口播值得反复听。你想要的不是整个视频,而是一个干净的音频文件,能在通勤路上闭眼享受。从这一刻开始,downkyicore 会怎么帮你,每一步背后又是什么原

gitblog_00903的博客 798

如何利用 osgameclones 资源进行游戏开发学习:实战案例分享

osgameclones 是一个专注于收集热门游戏开源克隆版本的项目,为游戏开发学习者提供了丰富的实战案例和参考资料。通过研究这些开源克隆项目,开发者可以深入了解游戏核心机制实现、图形渲染技术和跨平台开发经验,快速提升游戏开发技能。 ## 一、osgameclones 项目结构解析 osgameclones 项目采用清晰的目录结构组织各类游戏克隆资源,主要包含以下核心目录: - **game

gitblog_00444的博客 570
上一篇: 【杂谈】如何学会看arxiv.org才能不错过自己研究领域的最新论文?
下一篇: 【AI初识境】深度学习模型评估,从图像分类到生成模型
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值