Keras实现LeNet-5网络,并可视化网络结构图

        模型源自Yann LeCun(1998)的论文《Gradient-Based Learning Applied to Document Recognition》,用于MNIST数据集。模型输入为32X32的灰度图像,第一层为6个5X5卷积核,不扩展边界;第二层为2X2的最大值池化层,步进为2X2;第三层为16个5X5卷积核,不扩展边界;第四层为2X2的最大值池化层,步进为2X2;第五层为展平层,并全连接120个节点;第六层为全连接层,84个节点;第七层为全连接softmax层,输出结果。

        原论文中第二层池化层和第三层卷积层之间为是部分连接。本文中并未考虑,而是做成全连接,模型结构如下图所示。



        模型采用keras的Sequential实现,源数据分为train和test两个文件夹,每个文件夹下有十个子文件夹,分别方有各数字对应的灰度图。实现代码如下:

import os
import cv2
from numpy import *
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Conv2D, MaxPooling2
  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
首先,我们需要导入keras和相关的库: ```python import keras from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense from keras.datasets import mnist from keras.utils import to_categorical ``` 然后我们加载mnist数据集,并对其进行预处理: ```python # 加载mnist数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 数据预处理 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float32') / 255 x_test = x_test.reshape(x_test.shape[0], 28, 28, 1).astype('float32') / 255 y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10) ``` 接下来,我们搭建Lenet-5网络模型: ```python # 创建lenet-5网络 model = Sequential() model.add(Conv2D(filters=6, kernel_size=(5, 5), strides=(1, 1), activation='tanh', input_shape=(28, 28, 1))) model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) model.add(Conv2D(filters=16, kernel_size=(5, 5), strides=(1, 1), activation='tanh')) model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) model.add(Flatten()) model.add(Dense(120, activation='tanh')) model.add(Dense(84, activation='tanh')) model.add(Dense(10, activation='softmax')) ``` 最后,我们编译并训练模型,并在测试集上进行评估: ```python # 编译模型 model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adadelta(), metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, batch_size=128, epochs=10, validation_data=(x_test, y_test)) # 在测试集上评估模型性能 score = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) ``` 通过以上步骤,我们就成功基于keras搭建了一个Lenet-5网络,并实现了对mnist手写数字的识别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值