LeNet手写数字识别

本文详细介绍了经典的LeNet-5卷积神经网络,用于手写数字识别,包括网络结构、Keras与Pytorch实现,并分享了训练与测试过程中的经验。LeNet由3个卷积层、2个下采样层和2个全连接层组成,最初在美 国银行支票手写体识别中取得显著效果。

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

LeNet手写数字识别

简介

LeNet 是由Y.Lecun等人在1998年提出的第一个真正的卷积神经网络,现在的LeNet现在主要指LeNet5,其主要特点是卷积层和下采样层相结合作为网络的基本结构,其包括3个卷积层和2个下采样层和2个全连接层。最初设计LeNet的目的是识别手写字符和打印字符,效果非常好,曾被广泛应用于美 国银行支票手写体识别,取得了很大成功 。文章会用keras 和pytorch 搭建网络。

网络结构

直接上图看着更直观。
在这里插入图片描述

  1. C1层是卷积层,包含6个特征图,是由6个5x5的卷积核对输入图像卷积得到。
  2. S1层是一个下采样层,包含6个特征图,是由C1层的特征图经过2x2,步长为2的窗口进行平均池化,在利用sigmoid激活函数变换得到。
  3. C3是卷积层包含16个特征图,是由16个5x5的卷积核对S2进行卷积得到。
  4. S4是一个下采样层,包含16个特征图,是由C3层的特征图经过2x2,步长为2的窗口进行平均池化,在利用sigmoid激活函数变换得到。
  5. C5是卷积层包含120个特征图,是由120个5x5的卷积核对S2进行卷积得到。
  6. F6是包含84个神经元的全连接层,采用双曲正切激活函数。

注意事项

通过图片可以看到,LeNet的输入是32x32大小的图片,本文使用的手写数字识别数据集是mnist。图片大小为28x28。所以需要对数据集边界补充0。通过一下函数补充

  x = ZeroPadding2D(((4, 0), (4, 0)))(img_input)

Keras搭建LeNet

我是根据keras中搭建VGG16为参考编写的。

import keras.losses
from keras.utils import layer_utils
from sklearn.model_selection import train_test_split
from tensorflow.python.keras import backend
from tensorflow.keras import layers
from tensorflow.python.keras.engine import training
import matplotlib.pyplot as plt
import tensorflow as tf
import pandas as pd
from tensorflow.keras.layers import ZeroPadding2D

def letNet5(input_shape=(28, 28, 1), input_tensor=None, classes=10):
    if input_tensor is None:
        img_input = layers.Input(shape=input_shape)
    else:
        if not backend.is_keras_tensor(input_tensor):
            img_input = layers.Input(tensor=input_tensor, shape=input_shape)
        else:
            img_input = input_tensor
    x = ZeroPadding2D(((4, 0), (4, 0)))(img_input) #填充图片
    x = layers.Conv2D(6, (5, 5), strides=1, padding='valid', name='block1_conv1')(x)
    x = layers.AveragePooling2D((2, 2), (2, 2), name='block1_pool')(x)
    x=layers.Activation('sigmoid')(x)
    x = layers.Conv2D(16, (5, 5), strides=1, padding=<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

__不想写代码__

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值