keras_实现cnn_手写数字识别
# conding:utf-8
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = ''
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.optimizers import SGD
from keras import optimizers
import matplotlib.pyplot as plt
import pandas as pd
from keras.models import load_model # 数据准备
x_train =np.zeros((4500,28,28,1))
x_test =np.zeros((500,28,28,1))
y_train=[]
y_test=[] for i in range(0,10):
for j in range(1,501):
if j < 451: #将数据保存到训练数据中
x_train[(j-1)+(i*450),:,:,0]=plt.imread('./data/%d/%d_%d.bmp'%(i,i,j)) #reshape 可以降维也就是矩阵变化
y_train.append(i) #append 是读进来的数据进行存储的意思
else: #保存到预测数据中
x_test[(i*50)+(j-452),:,:,0]=plt.imread('./data/%d/%d_%d.bmp'%(i,i,j))
y_test.append(i)
y_t = np.array(y_test).reshape(-1,1)
print(x_train.shape)
# x_train = np.array(x_train).reshape(450,28,28,1)
y_train = np.array(pd.get_dummies(y_train))
print(y_train.shape)
# x_test = np.array(x_test).reshape(50,28,28,1)
y_test = np.array(pd.get_dummies(y_test)) # 模型建立 model = Sequential()
# 第一层:
model.add(Conv2D(32,(3,3),input_shape=(28,28,1),activation='relu',padding='valid'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.3)) #第二层:
# model.add(Conv2D(64,(5,5),activation='relu',padding='same',data_format='channels_first'))
# model.add(MaxPooling2D(pool_size=(2,2)))
# model.add(Dropout(0.25))
model.add(Conv2D(32,(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
# 2、全连接层和输出层:
model.add(Flatten())
model.add(Dense(128,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10,activation='softmax')) model.summary()
model.compile(loss='categorical_crossentropy',#,'binary_crossentropy'
optimizer=optimizers.Adadelta(lr=0.2, rho=0.95, epsilon=1e-06),#,'Adadelta'
metrics=['accuracy']) # 模型训练
model.fit(x_train,y_train,batch_size=128,epochs=35)
y_y = model.predict(x_test)
score = model.evaluate(x_test, y_test, verbose=0)
# 保存模型
# model.save('test/my_model.h5')
print(score)
# 模型导入
# model = load_model('test/my_model.h5')
# y_y = model.predict(x_test)
# y_s = np.argmax(y_y,axis=1).reshape(-1,1)
# score_pred = len((y_t-y_s)[(y_t-y_s)==0])/len(y_t)
# print('准确率:',score_pred)
# plt.figure(figsize=(12,6))
# plt.scatter(list(range(len(y_s))),y_s,c=y_t)
# xlabel = ['数字0','数字1','数字2','数组3','数字4','数字5','数字6','数字7','数字8','数字9']
# plt.yticks(range(10),xlabel)
# plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为SimHei显示中文
# plt.rcParams['axes.unicode_minus'] = False # 设置正常显示符号
# plt.show()
keras_实现cnn_手写数字识别的更多相关文章
- C#中调用Matlab人工神经网络算法实现手写数字识别
手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化 投影 矩阵 目标定位 Matlab 手写数字图像识别简介: 手写 ...
- CNN 手写数字识别
1. 知识点准备 在了解 CNN 网络神经之前有两个概念要理解,第一是二维图像上卷积的概念,第二是 pooling 的概念. a. 卷积 关于卷积的概念和细节可以参考这里,卷积运算有两个非常重要特性, ...
- 【深度学习系列】PaddlePaddle之手写数字识别
上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ...
- 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 机器学习(二)-kNN手写数字识别
一.kNN算法是机器学习的入门算法,其中不涉及训练,主要思想是计算待测点和参照点的距离,选取距离较近的参照点的类别作为待测点的的类别. 1,距离可以是欧式距离,夹角余弦距离等等. 2,k值不能选择太大 ...
- 利用神经网络算法的C#手写数字识别
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwritten_character_recognition.zip 下载源码 - 70. ...
- Android+TensorFlow+CNN+MNIST 手写数字识别实现
Android+TensorFlow+CNN+MNIST 手写数字识别实现 SkySeraph 2018 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站 ...
- 深度学习之 mnist 手写数字识别
深度学习之 mnist 手写数字识别 开始学习深度学习,先来一个手写数字的程序 import numpy as np import os import codecs import torch from ...
- 手写数字识别 ----在已经训练好的数据上根据28*28的图片获取识别概率(基于Tensorflow,Python)
通过: 手写数字识别 ----卷积神经网络模型官方案例详解(基于Tensorflow,Python) 手写数字识别 ----Softmax回归模型官方案例详解(基于Tensorflow,Pytho ...
随机推荐
- [网站日志]今天早上遭遇的CPU 100%情况
今天早上9:06左右,Windows性能监视器监测到主站的Web服务器出现了CPU 100%的情况,伴随着Requests/Sec的上升,详见下图. 上图中红色线条表示的是%Processor Tim ...
- ACE学习综述(1)
1. ACE学习综述 1.1. ACE项目的优点 可以跨平台使用,基本上可以实现一次编写,多平台运行. ACE本身不仅仅是一个简单的网络框架,对于网络框架涉及到的进程管理.线程管理等系统本身相关的内容 ...
- 【功能笔记】Ubuntu查看系统资源占用(内存,cpu和进程) {转载}
转载自http://bluexp29.blog.163.com/blog/static/33858148201071534450856/ linux真是太强大了. 查看ubuntu的资源占用的命令为$ ...
- Datenode无法启动
执行start-dfs.sh后,或者执行datenode没有启动.很大一部分原因是因为在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令 这时主节点namenode的clus ...
- Python登录小程序
------------------------------------------------- 主要实现功能 1.用户输入用户名,在用户名文件中查找对应的用户,若无对应用户名则打印输入错误 2.用 ...
- 数论初步——Eratosthenes筛法
具体内容见紫书p312-p313 一.用Eratosthenes筛法构造1~n的素数表 思想:对于不超过n的每个非负整数p,删除2p,3p,4p…,当处理完所有的数后,还没有被删除的就是素数. 代码: ...
- python字符串排序方法
一般情况下,python中对一个字符串排序相当麻烦: 一.python中的字符串类型是不允许直接改变元素的.必须先把要排序的字符串放在容器里,如list. 二.python中的list容器的sort( ...
- LTE中基于S1的切换
1:源eNodeB决定进行基于S1的切换.S1切换的原因可能是源eNodeB和目标eNodeB之间不存在X2连接,或者源eNodeB根据其他情况作出的判断. 2:源eNodeB向源MME发送Hando ...
- 在fslook
fslook让我们从内核看文件系统而不是从用户态,从这个工具中发现了很多之前忽略过的点. 1)overlay从内核中看到的文件的ino为什么和用户态stat中看到的ino不是一样的?
- URL大小写敏感之谜
URL其实就是我们浏览器地址栏的地址,一般由三部分组成: 协议名称,一般就是http 域名,也就是主机名 资源路径 如链接:http://www.w3school.com.cn/js/js_obj_r ...