一层
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)
结果: