基于MNIST数据集的手写数字识别

最近刚学深度学习模型,今天说一下一个经典的Keras实列:基于MNIST数据集的手写数字识别,也是深度学习过程中的一个入门级别的模型。

首先介绍一下minst数据集:MNIST数据集(Mixed National Institute of Standards and Technology database)是美国国家标准与技术研究院收集整理的大型手写数字数据库,包含60,000个示例的训练集以及10,000个示例的测试集。

大概图片如下:

下载数据集可以通过代码直接下载,也可以下载压缩包(导入解压过程比较麻烦),mnist数据集分为4类:训练数据集,训练数据集标签,测试数据集和测试数据集标签,

当我们执行代码的时候,会自己去下载mnist数据集(建议在早上下载),当导入数据集以后,我们开始初始化数据,然后进行模型的训练,最后用测试集进行测试,得出损失和准确率。

首先,便是各种包的导入:

然后,便是Mnist数据集的导入,使用mnist.load_data()可以自己去下载,接下来便初始化数据。

对于数据初始化以后,便设计自己的模型,我设置了2层卷积,2层池化,为了过拟合,设置Dropout,最后一层全连接输出。

然后将数据导入模型,进行训练

最后。用测试集进行测试,得到准确度。

 

下面附上所有代码链接: https://github.com/litongtong10067/CNN

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是一个使用 PyTorch 框架实现的 MNIST 手写数字识别代码: ```python import torch import torch.nn as nn import torch.optim as optim import torchvision.transforms as transforms from torchvision.datasets import MNIST from torch.utils.data import DataLoader # 定义模型 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 32, 3, padding=1) self.conv2 = nn.Conv2d(32, 64, 3, padding=1) self.pool = nn.MaxPool2d(2) self.fc1 = nn.Linear(64 * 7 * 7, 128) self.fc2 = nn.Linear(128, 10) self.relu = nn.ReLU() def forward(self, x): x = self.relu(self.conv1(x)) x = self.pool(x) x = self.relu(self.conv2(x)) x = self.pool(x) x = x.view(-1, 64 * 7 * 7) x = self.relu(self.fc1(x)) x = self.fc2(x) return x # 定义超参数 batch_size = 64 learning_rate = 0.01 num_epochs = 5 # 加载数据集 train_dataset = MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True) test_dataset = MNIST(root='./data', train=False, transform=transforms.ToTensor(), download=True) train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False) # 实例化模型和损失函数以及优化器 model = Net() criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=learning_rate) # 训练模型 for epoch in range(num_epochs): train_loss = 0.0 train_acc = 0.0 for i, (images, labels) in enumerate(train_loader): optimizer.zero_grad() outputs = model(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() train_loss += loss.item() * images.size(0) _, preds = torch.max(outputs, 1) train_acc += torch.sum(preds == labels.data) train_loss = train_loss / len(train_loader.dataset) train_acc = train_acc / len(train_loader.dataset) print('Epoch [{}/{}], Loss: {:.4f}, Accuracy: {:.2f}%'.format(epoch+1, num_epochs, train_loss, train_acc*100)) # 测试模型 with torch.no_grad(): test_loss = 0.0 test_acc = 0.0 for i, (images, labels) in enumerate(test_loader): outputs = model(images) loss = criterion(outputs, labels) test_loss += loss.item() * images.size(0) _, preds = torch.max(outputs, 1) test_acc += torch.sum(preds == labels.data) test_loss = test_loss / len(test_loader.dataset) test_acc = test_acc / len(test_loader.dataset) print('Test Loss: {:.4f}, Test Accuracy: {:.2f}%'.format(test_loss, test_acc*100)) ``` 这个代码中定义了一个卷积神经网络模型,使用 SGD 优化器进行训练,最后在测试集上进行测试并输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值