人工智能实验: 神经网络实现手写数字识别tensorflow/Pytorch(附完整项目代码和实验报告)

识别结果:

7138c60f3c76413cabd080a6d4eef37e.png

数据集:

Yann提供的手写数字数据集构成,包含了0~910类手写数字图片。每张图片都做了尺寸归一化,为28*28大小的灰度图。每张图片中像素值大小为0-255之间。

MNIST数据集是机器学习领域中非常经典的一个数据集,由60000个训练样本和10000个测试样本组成,每个样本都是一张28 * 28像素的灰度手写数字图片。

 

下面简单介绍下各个网络:

LeNet神经网络

网络主要由两部分组成:卷积编码器:由两个卷积层组成;全连接层密集块:由三个全连接层组成

AlexNet深度卷积神经网络

 AlexNet是Alex和Hinton参加2012年imagenet比赛时提出的卷积网络框架,夺得了当年ImageNet LSVRC的冠军,且准确率远超第二名,带来了深度学习的又一次高潮。

ResNet深度卷积神经网络

残差神经网络(ResNet)是由微软研究院的何恺明、张祥雨、任少卿、孙剑等人提出的。ResNet 在2015 年的ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中取得了冠军。残差神经网络的主要贡献是发现了“退化现象(Degradation)”,并针对退化现象发明了 “快捷连接(Shortcut connection)”,极大的消除了深度过大的神经网络训练困难问题。神经网络的“深度”首次突破了100层、最大的神经网络甚至超过了1000层。

分别实现了Pytorch版和Tensorflow版,其中Pytorch版中使用的是ResNet18作为主干网络

Pytorch版项目 torch==1.14.0(预训练权重有50MB)

cb4f7c4ea54f489fb307bc188bcff0c6.png

Tensorflow版 使用的模型比较轻量化

b00be9d4e68e46b681381c93f9ec11ff.png

 8fb7784b18f6407bbb73b253d2ec8ccd.png

实验报告部分截图:

6eef912f92a64467a7307804fa953e5f.png

807ea407848648b08b4be1823b044679.png 6396d0a5e2e548deb2649be80c434b3e.png

4303b92625ed46608870d31b3c800a3b.png

 b8841101b9604d008c4a6bd9fb6e8e00.png

 f52d99168b7848e9a839e10b3f5fcecd.png

目前准985计算机硕士 以上的所有项目代码+报告 可以私信我 20r 提供指导

邮箱:yangsober@163.com 大家可以一起交流~

9cf91a239e4e4ce7b0e9320cb4eede5b.jpeg

附上一些实现的代码:

以下代码是模型的结构和训练代码,安装好对应的tensorflow版本后,就可以进行训练

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from keras.datasets import mnist
import matplotlib.pyplot as plt
from keras import models
from keras import layers
import numpy as np
from keras.utils.np_utils import to_categorical

# 定义模型
def model_conv():
    model = models.Sequential()
    model.add(layers.Conv2D(32, (3, 3), activation='relu',input_shape=(28, 28, 1)))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.Flatten())
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dense(10, activation='softmax'))
    model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['acc'])
    return model

# 导入MNIST数据集
(train_data, train_labels), (test_data, test_labels) = mnist.load_data()
print('train_shape {} {}'.format(train_data.shape,train_labels.shape))
print('test_shape {} {}'.format(test_data.shape,test_labels.shape))
plt.imshow(train_data[0])
plt.title('number {}'.format(train_labels[0]))
plt.show()

# 数据预处理
x_train = train_data.reshape((60000, 28, 28, 1))
x_train = x_train.astype('float32')/255
x_test = test_data.reshape((10000, 28, 28, 1))
x_test = x_test.astype('float32')/255
y_train = to_categorical(train_labels)
y_test = to_categorical(test_labels)
print(x_train.shape, y_train.shape)

# 定义模型
model = model_conv()
print(model.summary())

# 开始训练
his = model.fit(x_train, y_train, epochs=5, batch_size=64, validation_split=0.1)

# 计算准确度
loss, acc = model.evaluate(x_test, y_test)
print('loss {}, acc {}'.format(loss, acc))

# 保存模型
model.save("my_mnist_model.h5")

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值