pyqt5手写板+pytorch卷积神经网络,实现手写数字识别软件

卷积神经网络的结构

#定义网络结构
#不是le-net5的结构
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # Sequential表示在搭建网络模型中要执行的一系列的步骤
        # Dropout中,p=0.5表示50%的神经元不工作
        # layer3:输出层 一般输出层中不需要加Dropout
        # Conv2d Conv:卷积 2d:表示2维的卷积
        # nn.Conv2d的几个参数
        # 1:输入通道数:1表示黑白的图片 彩色的话就是3
        # 32:输出通道数:表示要生成多少个特征图
        # 5:是卷积核的大小,(5,5)表示是5*5的窗口。可以只写一个5
        # 1表示步长。步长默认值就是1
        # 2表示在padding外面填2圈0 这个相当于samepadding
        # nn.MaxPool2d的几个参数
        # 第一个2是池化的窗口的大小是2*2 第二个2表示步长为2
        self.conv1 = nn.Sequential(nn.Conv2d(1,32,5,1,2),nn.ReLU(),nn.MaxPool2d(2,2))
        self.conv2 = nn.Sequential(nn.Conv2d(32,64,5,1,2),nn.ReLU(),nn.MaxPool2d(2,2))
        self.fc1 = nn.Sequential(nn.Linear(64*7*7,1000),nn.Dropout(p=0.5),nn.ReLU())
        self.fc2 = nn.Sequential(nn.Linear(1000,10),nn.Softmax(dim=1))
        # dim=1代表对第一个维度,计算概率值
        # 因为batch = 64
        # 所以fc1输出的是(64,10)
        # 所以dim=1,表示对第二个维度进行softmax求值
    def forward(self,x):
        # ([64,1,28,28])变成2维的数据->(64,784) 全连接层做计算,必须是2维的数据
        # x = x.view(x.size()[0],-1)
        # 但是卷积只能对四维的数据进行计算 ([64,1,28,28])
        # 64表示批次的数量,1表示通道数 28表示长宽
        x = self.conv1(x)
        x = self.conv2(x)

        #将原来x四维的数据,改变为2维的数据
        # (64,64,7,7)
        x = x.view(x.size()[0],-1)

        x = self.fc1(x)
        x = self.fc2(x)
        return x

代价函数是交叉熵,优化器是Adam,基于mnist数据集训练,30轮。

手写板的一部分代码,是借鉴的网络上的,然后我又将其魔改一番,最终形成了一个界面。运行好的效果,如下图所示。

识别结果是自动识别的,点击清空画板,画板就会清空,然后识别结果会变成99999。写下数字之后,便会自动识别。几乎是0延迟,预测结果非常的快! 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
非常好的项目!现在我将为你详细介绍如何基于卷积神经网络实现手写数字图片识别,并用GUI进行可视化。 首先,你需要准备一个手写数字图片数据集,可以使用MNIST数据集,这是一个广泛使用的手写数字图片数据集,包含60000个训练样本和10000个测试样本。使用Python中的Keras库进行卷积神经网络的构建,可以使用TensorFlow或者Theano作为后端。 在构建卷积神经网络之前,需要将手写数字图片数据集进行预处理,包括图像的归一化、灰度化、二值化等操作。归一化可以将图像的像素值缩放到0-1之间,灰度化可以将图像转换为灰度图像,二值化可以将图像转换为黑白二值图像。这些预处理操作可以提高卷积神经网络的准确率。 接下来,可以使用Keras中的Conv2D、MaxPooling2D、Flatten、Dense等层进行卷积神经网络的构建。其中,Conv2D层用于卷积操作,MaxPooling2D层用于池化操作,Flatten层用于将卷积层的输出展平,Dense层用于输出层的构建。可以根据实际情况调整每个层的参数,例如卷积核的大小、步长、填充方式等等。 在训练模型之前,需要将数据集分为训练集和测试集,可以使用Keras中的train_test_split函数进行随机划分。然后,可以使用compile函数对模型进行编译,包括选择损失函数、优化器、评估指标等等。最后,可以使用fit函数对模型进行训练,设置训练的批次大小、迭代次数等等。 完成模型的训练之后,可以使用GUI进行可视化。可以使用Python中的Tkinter库或者PyQt库进行GUI的设计和实现。可以在GUI界面上添加一个画布,用于用户手写数字的输入,然后将用户输入的数字转换为灰度图像,并输入到卷积神经网络中进行预测。预测结果可以显示在GUI界面上,供用户查看。 总的来说,基于卷积神经网络实现手写数字图片识别并用GUI进行可视化是一个非常有趣和有用的项目,可以提高你对深度学习和图形用户界面的理解和应用能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值