手写数字识别-Keras版本

一层

from keras.datasets import mnist
import numpy as np 

#分配数据集
(x_train,y_train),(x_test,y_test)=mnist.load_data()



# x1_train=x_train[0]
# y1_train=y_train[0]

# print('图片集信息:',x_train)
# print('图片集标签:',y_train)
# print('图片集信息shape:',x_train.shape)
# print('图片集标签shape:',y_train.shape)

# print('图片一信息: ',x1_train)
# print('图片一信息shape: ',x1_train.shape)
# print('图片一标签: ',y1_train)
# print('图片一标签shape: ',y1_train.shape)

from keras.models import Sequential
from keras.layers import Dense

#搭积木第一步:构造空积木模型
model=Sequential()
#接下来搭第一层:因为手写数字识别包含三步:输入,第一层,激活函数
#使用softmax激活函数进行多分类
model.add(Dense(units=10,input_dim=28*28,activation='softmax'))
#接下来编译这个模型
#logic损失函数使用交叉熵损失函数
#优化方法使用Adam
#评估方法用正确率评估
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
#下面对训练数据进行标准化
x_train=np.array(x_train).reshape((60000,28*28))/255
x_test=np.array(x_test).reshape((10000,28*28))/255

#下面将标签数据转化成one-hot向量
from keras.utils.np_utils import to_categorical
y_train=to_categorical(np.array(y_train),num_classes=10)
y_test=to_categorical(np.array(y_test),num_classes=10)

#下面进行训练数据集
model.fit(x_train,y_train)

#evaluate返回的结果是误差值和准确率
loss_and_metrics=model.evaluate(x_test,y_test)

print('测试结果',loss_and_metrics)

结果:
在这里插入图片描述
多层

from keras.datasets import mnist
import numpy as np 

#分配数据集
(x_train,y_train),(x_test,y_test)=mnist.load_data()



# x1_train=x_train[0]
# y1_train=y_train[0]

# print('图片集信息:',x_train)
# print('图片集标签:',y_train)
# print('图片集信息shape:',x_train.shape)
# print('图片集标签shape:',y_train.shape)

# print('图片一信息: ',x1_train)
# print('图片一信息shape: ',x1_train.shape)
# print('图片一标签: ',y1_train)
# print('图片一标签shape: ',y1_train.shape)

from keras.models import Sequential
from keras.layers import Dense

#搭积木第一步:构造空积木模型
model=Sequential()
#接下来搭建6层网络层
#最后的激活函数使用softmax进行多分类
model.add(Dense(units=64,input_dim=28*28,activation='relu'))
model.add(Dense(units=64,activation='relu'))
model.add(Dense(units=64,activation='relu'))
model.add(Dense(units=64,activation='relu'))
model.add(Dense(units=64,activation='relu'))
model.add(Dense(units=10,activation='softmax'))
#接下来编译这个模型
#logic损失函数使用交叉熵损失函数
#优化方法使用Adam算法
#评估方法用正确率评估
model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
#下面对训练数据进行标准化
x_train=np.array(x_train).reshape((60000,28*28))/255
x_test=np.array(x_test).reshape((10000,28*28))/255

#下面将标签数据转化成one-hot向量
from keras.utils.np_utils import to_categorical
y_train=to_categorical(np.array(y_train),num_classes=10)
y_test=to_categorical(np.array(y_test),num_classes=10)

#下面进行训练数据集
model.fit(x_train,y_train)

loss_and_metrics=model.evaluate(x_test,y_test)

print('测试结果',loss_and_metrics)

结果:
在这里插入图片描述
改进
接下来搭建2层网络,相比之前的版本,加深网络深度不如增加每层的神经元个数,效果更好而且训练速度更快。

from keras.datasets import mnist
import numpy as np 

#分配数据集
(x_train,y_train),(x_test,y_test)=mnist.load_data()



# x1_train=x_train[0]
# y1_train=y_train[0]

# print('图片集信息:',x_train)
# print('图片集标签:',y_train)
# print('图片集信息shape:',x_train.shape)
# print('图片集标签shape:',y_train.shape)

# print('图片一信息: ',x1_train)
# print('图片一信息shape: ',x1_train.shape)
# print('图片一标签: ',y1_train)
# print('图片一标签shape: ',y1_train.shape)

from keras.models import Sequential
from keras.layers import Dense

#搭积木第一步:构造空积木模型
model=Sequential()
#接下来搭建2层,相比之前的版本,加深网络深度不如增加每层的神经元个数
model.add(Dense(units=256,input_dim=28*28,activation='relu'))
model.add(Dense(units=10,activation='softmax'))
#接下来编译这个模型
#logic损失函数使用交叉熵损失函数
#优化方法使用Adam
#评估方法用正确率评估
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
#下面对训练数据进行标准化
x_train=np.array(x_train).reshape((60000,28*28))/255
x_test=np.array(x_test).reshape((10000,28*28))/255

#下面将标签数据转化成one-hot向量
from keras.utils.np_utils import to_categorical
y_train=to_categorical(np.array(y_train),num_classes=10)
y_test=to_categorical(np.array(y_test),num_classes=10)

#下面进行训练数据集
model.fit(x_train,y_train,epochs=100)

loss_and_metrics=model.evaluate(x_test,y_test)

print('测试结果',loss_and_metrics)

结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值