提示:博主也是小白,通过学习其他的大神的代码,加了自己的注释和见解,希望能让人更加明白。一起学习!
Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化 。
Keras在代码结构上由面向对象方法编写,完全模块化并具有可扩展性,其运行机制和说明文档有将用户体验和使用难度纳入考虑,并试图简化复杂算法的实现难度 。Keras支持现代人工智能领域的主流算法,包括前馈结构和递归结构的神经网络,也可以通过封装参与构建统计学习模型 。在硬件和开发环境方面,Keras支持多操作系统下的多GPU并行计算,可以根据后台设置转化为Tensorflow、Microsoft-CNTK等系统下的组件 。
from keras.utils import to_categorical
from keras import models, layers, regularizers
from keras.optimizers import RMSprop
from keras.datasets import mnist
import matplotlib.pyplot as plt
(train_images,train_labels),(test_images,test_labels)=mnist.load_data()#归一化处理,注意必须进行归一化操作,否则准确率非常低,图片和标签
#将图片由二维铺开成一维
train_images=train_images.reshape((60000,28*28)).astype('float') #将28*28的二维数组转变为784的一维数组,浮点数类型
test_images=test_images.reshape((10000,28*28)).astype ('float')
train_labels=to_categorical(train_labels) #to_categorical就是将类别向量转换为二进制(只有0和1)的矩阵类型表示
test_labels=to_categorical(test_labels)
#print(train_labels[0])
(network = models.Sequential() #选用的是Sequential 序贯模型
network.add(layers.Dense(units=15, activation='relu', input_shape=(28*28, ),))#添加一个(隐藏层)全连接层,神经元为15,激活函数是relu线性整流
#函数,输入形状为28*28
network.add(layers.Dense(units=10, activation='softmax'))#添加一个(输出层)全连接层,神经元为10,激活函数为softmax(Softmax 具有更好的解释性,
#包含属于猫的这一类的特征越多,输出为猫的概率就越大)
#这块通过softmax激活函数,最后的数组中,十个数哪个最大,计算机就认为是哪个
#print(network.summary()) #查看神经网络model结构
# 编译步骤,损失函数是模型优化的目标,优化器使用RMSporp,学习率为0.001,损失函数是categorical_crossentropy,评价函数为accuracy准确率
network.compile(optimizer=RMSprop(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
# 训练网络,用fit函数(fit()方法用于执行训练过程), epochs表示训练多少个回合, batch_size表示每次训练给多大的数据,一次训练所选取的样本数。
network.fit(train_images, train_labels, epochs=22, batch_size=128, verbose=2) #verbose:日志显示 0 为不在标准输出流输出日志信息 1 为输出进度条记录
#2 为每个epoch输出一行记录
y_pre = network.predict(test_images[:5]) #预测前五张图片的,model.predict 实际预测,其输出是目标值,根据输入数据预测。
print(y_pre, test_labels[:5])
test_loss, test_accuracy = network.evaluate(test_images, test_labels) #model.evaluate函数预测给定输入的输出
print("test_loss:", test_loss, " test_accuracy:", test_accuracy)
上面是神经网络的结构,下面是运行结果,最后识别率是0.838。和CNN相差太多了
本次的神经网络识别mnist数据集,完全采用的是全连接层,所以识别率较低,而且出现过拟合现象,可以使用正则化,同时使部分的神经元失去作用就会好很多。
这也是博主第一次写,不好的地方请大家多多指正!谢谢!
下面是我看的这位Up主的,觉得写得很好!,尤其是他还有视频讲解,非常友好。[https://blog.csdn.net/qq_40438165/article/details/105846692]