鱼C论坛

 找回密码
 立即注册
查看: 7629|回复: 59

[技术交流] python小练习(083):基于keras快速搭建神经网络(进阶篇)之手写数字自动识别

[复制链接]
发表于 2017-3-27 06:11:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jerryxjr1220 于 2017-4-19 14:12 编辑

在上一期python小练习(082)的基础上,今天我们继续用keras来实现手写数字图片的自动识别。
同样的方法可以实现网站验证码的自动识别,前提是要收集足够多的可用于学习的验证码原始图片,并且这些图片需要事先分好类。

下面就让我们开始吧。
原始的手写数字图片,如这个样子:
1.png 9.png 8.png 7.png 6.png 5.png 4.png 3.png 2.png

经过机器自动学习以后:
~~~~Training~~~~
Epoch 1/2
   32/60000 [..............................] - ETA: 84s - loss: 2.2966 - acc: 0.1562
  352/60000 [..............................] - ETA: 16s - loss: 1.5836 - acc: 0.5341
  608/60000 [..............................] - ETA: 15s - loss: 1.3376 - acc: 0.6266
  960/60000 [..............................] - ETA: 12s - loss: 1.0848 - acc: 0.6917
1280/60000 [..............................] - ETA: 11s - loss: 0.9546 - acc: 0.7328
1536/60000 [..............................] - ETA: 12s - loss: 0.8830 - acc: 0.7546
...
...
...
59104/60000 [============================>.] - ETA: 0s - loss: 0.2233 - acc: 0.9352
59392/60000 [============================>.] - ETA: 0s - loss: 0.2227 - acc: 0.9353
59744/60000 [============================>.] - ETA: 0s - loss: 0.2219 - acc: 0.9355
60000/60000 [==============================] - 11s - loss: 0.2218 - acc: 0.9356   
Epoch 2/2
   32/60000 [..............................] - ETA: 18s - loss: 0.3342 - acc: 0.9062
  192/60000 [..............................] - ETA: 19s - loss: 0.2109 - acc: 0.9323
  352/60000 [..............................] - ETA: 19s - loss: 0.1708 - acc: 0.9489
  640/60000 [..............................] - ETA: 15s - loss: 0.1391 - acc: 0.9563
  992/60000 [..............................] - ETA: 13s - loss: 0.1309 - acc: 0.9617
1280/60000 [..............................] - ETA: 13s - loss: 0.1236 - acc: 0.9625
1632/60000 [..............................] - ETA: 12s - loss: 0.1256 - acc: 0.9626
...
...
...
59008/60000 [============================>.] - ETA: 0s - loss: 0.1009 - acc: 0.9709
59296/60000 [============================>.] - ETA: 0s - loss: 0.1012 - acc: 0.9709
59488/60000 [============================>.] - ETA: 0s - loss: 0.1011 - acc: 0.9709
59776/60000 [============================>.] - ETA: 0s - loss: 0.1010 - acc: 0.9710
60000/60000 [==============================] - 11s - loss: 0.1008 - acc: 0.9710   

~~~~Evaluation~~~~
   32/10000 [..............................] - ETA: 2s
1216/10000 [==>...........................] - ETA: 0s
1792/10000 [====>.........................] - ETA: 0s
2496/10000 [======>.......................] - ETA: 0s
3552/10000 [=========>....................] - ETA: 0s
4704/10000 [=============>................] - ETA: 0s
5888/10000 [================>.............] - ETA: 0s
6592/10000 [==================>...........] - ETA: 0s
7584/10000 [=====================>........] - ETA: 0s
8704/10000 [=========================>....] - ETA: 0s
9856/10000 [============================>.] - ETA: 0s

loss: 0.108989, accuracy: 0.970900

可以看到,经过机器学习以后,数字识别的准确率达到了惊人的97%(还包括手写图片中写得确实很差的数字)

为了能直观得看到自动分类识别的结果,我把每个图片的识别概率转换为了二维的坐标,用不同颜色进行了标注,这样看得更清楚。
figure_1.png


源代码及讲解:

游客,如果您要查看本帖隐藏内容请回复
figure_1.png

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-27 11:02:50 | 显示全部楼层
楼主好强
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-27 19:50:43 | 显示全部楼层
可怕!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-28 00:54:06 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-7 20:38:00 | 显示全部楼层
棒棒哒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 16:01:28 | 显示全部楼层
kankan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 16:02:15 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-19 14:17:49 | 显示全部楼层
增加了把分类的结果用图形化显示,这样看得更直观,可以看到机器确实做到了分类识别。
图中有部分图像重叠,是因为原本的10维数据本降维处理成2维,造成了特征的丢失,实际上在10维的维度上来看应该还是分得比较开的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-19 14:18:29 | 显示全部楼层
图形转化部分的代码:
# coding:utf-8
import numpy as np
from matplotlib import pyplot as plt
from keras.models import load_model
from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
X_train = x_train.reshape(60000, 784) / 255.0
X_test = x_test.reshape(10000, 784) / 255.0
Y_train = np.array([[0] * 10 for i in range(60000)])
for i in range(60000):
    Y_train[i][y_train[i]] = 1
Y_test = np.array([[0] * 10 for i in range(10000)])
for i in range(10000):
    Y_test[i][y_test[i]] = 1

model = load_model('mnist.h5')
predicts = model.predict(X_test) * 255

pred = []
for i in range(len(predicts)):
    px, py = 0, 0
    for j in range(10):
        r = predicts[i][j]
        px += np.sin(3.1415926 * j / 5) * r
        py += np.cos(3.1415926 * j / 5) * r
    pred.append([px, py])
pred = np.array(pred)

plt.scatter(pred[:, 0], pred[:, 1], c=y_test)
plt.show()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-19 16:27:46 From FishC Mobile | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-28 09:15:15 | 显示全部楼层
good
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-28 15:30:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-30 15:34:11 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 23:12:52 | 显示全部楼层
谢谢分享~~~!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-30 15:16:27 | 显示全部楼层
朝圣了,大大太厉害了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 08:26:29 From FishC Mobile | 显示全部楼层
厉害了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-12 15:51:26 | 显示全部楼层
学习下keras
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2017-6-26 09:59:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-7 17:25:00 | 显示全部楼层
过来学习深度学习知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-14 15:00:09 | 显示全部楼层
哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 11:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表