【深度学习系列】用PaddlePaddle和Tensorflow进行图像分类

本文介绍了如何使用PaddlePaddle和Tensorflow实现图像分类,通过CIFAR-10数据集进行训练。首先,自定义了一个简单的CNN网络,然后实现了LeNet-5网络结构。经过训练,LeNet-5模型在CIFAR-10上的错误分类率降低,显示出比自定义CNN更好的性能。文章还提到了过拟合问题,并计划探讨防止过拟合的方法和AlexNet的实验。作者是高级算法工程师,熟悉深度学习框架,并提供了相关资源链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

感谢关注天善智能,走好数据之路↑↑↑

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。


       上个月发布了四篇文章,主要讲了深度学习中的“hello world”----mnist图像识别,以及卷积神经网络的原理详解,包括基本原理、自己手写CNN和paddlepaddle的源码解析。这篇主要跟大家讲讲如何用PaddlePaddle和Tensorflow做图像分类。所有程序都在我的github里,可以自行下载训练。

  在卷积神经网络中,有五大经典模型,分别是:LeNet-5,AlexNet,GoogleNet,Vgg和ResNet。本文首先自己设计一个小型CNN网络结构来对图像进行分类,再了解一下LeNet-5网络结构对图像做分类,并用比较流行的Tensorflow框架和百度的PaddlePaddle实现LeNet-5网络结构,并对结果对比。

什么是图像分类

   图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。图像分类在很多领域有广泛应用,包括安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等(引用自官网)

cifar-10数据集

  CIFAR-10分类问题是机器学习领域的一个通用基准,由60000张32*32的RGB彩色图片构成,共10个分类。50000张用于训练集,10000张用于测试集。其问题是将32X32像素的RGB图像分类成10种类别:飞机,手机,鸟,猫,鹿,狗,青蛙,马,船和卡车。更多信息可以参考CIFAR-10和Alex Krizhevsky的演讲报告。常见的还有cifar-100,分类物体达到100类,以及ILSVRC比赛的100类。


自己设计CNN

  了解CNN的基本网络结构后,首先自己设计一个简单的CNN网络结构对cifar-10数据进行分类。

 网络结构

 代码实现

1.网络结构:simple_cnn.py

#coding:utf-8

'''

Created by huxiaoman 2017.11.27

simple_cnn.py:自己设计的一个简单的cnn网络结构

'''

import os

from PIL import Image

import numpy as np

import paddle.v2 as paddle

from paddle.trainer_config_helpers import *

with_gpu = os.getenv('WITH_GPU', '0') != '1'

def simple_cnn(img):

    conv_pool_1 = paddle.networks.simple_img_conv_pool(

        input=img,

        filter_size=5,

        num_filters=20,

        num_channel=3,

        pool_size=2,

        pool_stride=2,

        act=paddle.activation.Relu())

    conv_pool_2 = paddle.networks.simple_img_conv_pool(

        input=conv_pool_1,

        filter_size=5,

        num_filters=50,

        num_channel=20,

        pool_size=2,

        pool_stride=2,

        act=paddle.activation.Relu())

    fc = paddle.layer.fc(

        input=conv_pool_2, size=512, act=paddle.activation.Softmax())

 2.训练程序:train_simple_cnn.py

#coding:utf-8

'''

Created by huxiaoman 2017.11.27

train_simple—_cnn.py:训练simple_cnn对cifar10数据集进行分类

'''

import sys, os

import paddle.v2 as paddle

from simple_cnn import simple_cnn

with_gpu = os.getenv('WITH_GPU', '0') != '1'

def main():

    datadim = 3 * 32 * 32

    classdim = 10

    # PaddlePaddle init

    paddle.init(use_gpu=with_gpu, trainer_count=7)

    image = paddle.layer.data(

        name="image", type=paddle.data_type.dense_vector(datadim))

    # Add neural network config

    # option 1. resnet

    # net = resnet_cifar10(image, depth=32)

    # option 2. vgg

    net = simple_cnn(image)

    out = paddle.layer.fc(

        input=net, size=classdim, act=paddle.activation.Softmax())

    lbl = paddle.layer.data(

        name="label", type=paddle.data_type.integer_value(classdim))

    cost = paddle.layer.classification_cost(input=out, label=lbl)

    # Create parameters

    parameters = paddle.parameters.create(cost)

    # Create optimizer

    momentum_optimizer = paddle.optimizer.Momentum(

        momentum=0.9,

        regularization=paddle.optimizer.L2Regularization(rate=0.0002 * 128),

        learning_rate=0.1 / 128.0,

        learning_rate_decay_a=0.1,

        learning_rate_decay_b=50000 * 100,

        learning_rate_schedule='discexp')

    # End batch and end pass event handler

    def event_handler(event):

        if isinstance(event, paddle.event.EndIteration):

            if event.batch_id % 100 == 0:

                print "\nPass %d, Batch %d, Cost %f, %s" % (

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值