神经网络的dense_Keras人工智能神经网络 Classifier 分类 神经网络搭建
在之前的分享中,我们详细介绍了如何构建基于tensorflow和pytorch的分类神经网络模型。其中训练数据集采用的是mnist数据集,在介绍keras框架时,我们也会使用mnist作为训练数据集,并对模型进行参数优化以实现准确率目标。关于mnist数据集的相关信息,读者可以在之前的篇章中找到详细说明。

数据预处理
使用Keras以及整合MNIST数据包,并将其分为训练集和测试集。x代表一张图片,y是每张图片所对应的标签值,即其标签值为(0-9)。
将输入变量 x 转换为大小为 60,000 \times 784 的数据样本后进行归一化处理。归一化的过程是通过将每个像素值除以255来实现的。由于每个像素值的范围都在 [0,255] 区间内,在此操作后得到的结果范围变为介于零到一之间。(这也是为什么选择这样的数据格式的原因之一)
在处理 y 的过程中,我们调用经过 Keras 修改后的 numpy 函数 np_utils.to_categorical 将其转换为 one-hot 编码的形式。假设原始的 y 值是一个整数,在 0 到 9 的范围内,默认情况下这是一个二维向量(大小为10),其中只有一个元素会被标记为1表示对应的类别归属感
import numpy as npnp.random.seed(1337)from keras.datasets import mnistfrom keras.utils import np_utilsfrom keras.models import Sequentialfrom keras.layers import Dense, Activation #激励函数from keras.optimizers import RMSprop # 优化器#import matplotlib.pyplot as plt # 可视化模块
# 分类# 若是首次运行,keras会自动下载MNIST数据集(X_train, y_train), (X_test, y_test) = mnist.load_data()X_train = X_train.reshape(X_train.shape[0], -1) / 255. #标准化数据X_test = X_test.reshape(X_test.shape[0], -1) / 255. #标准化数据y_train = np_utils.to_categorical(y_train, num_classes=10)y_test = np_utils.to_categorical(y_test, num_classes=10)# 打印一下数据的形状print(X_train[1].shape)print(y_train[:3]) # one-hot 的形式"""(784,)[[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.][1. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]]"""
搭建神经网络
models.Sequential,用来一层一层的去建立神经网络
Dense 神经层,32 是输出的维度,784 是输入的维度
应用relu激活函数后,在经由激活过程的数据中呈现出非线性特征,并将这些数据传递给下一层神经网络Dense层进行处理。值得注意的是,在此情境下无需显式定义输入维度参数,默认会继承上一层输出作为当前层的输入特征
然后使用 softmax 函数,用来分类
再使用RMSprop优化器对神经网络进行优化
最后使用model.compile来对神经网络进行激励
model = Sequential([Dense(32, input_dim=784),Activation('relu'),Dense(10),Activation('softmax'),])rmsprop = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)model.compile(optimizer=rmsprop, loss='categorical_crossentropy',metrics=['accuracy'])
训练神经网络
完成神经网络架构搭建后,可以通过对...进行训练,其中训练过程采用fit函数,输入变量包括x和y,epoch参数指定整个数据集的迭代次数,batch_size参数决定了每次处理的数据量,经过上述步骤后,能够观察到相应的训练结果
model.fit(X_train, y_train, epochs=2, batch_size=32)
测试神经网络
使用model.evaluate函数将测试数据集作为输入传入该函数即可获得测试数据的loss以及accuracy
打印一下loss以及accuracy,查看训练结果
loss, accuracy = model.evaluate(X_test, y_test)print('test loss: ', loss)print('test accuracy: ', accuracy)
以上便是上文所述的Keras分类神经网络搭建流程。下期我们将讲解如何应用Keras中的CNN卷积神经网络来进行图像分类任务。下期的数据集是小编整理的小雪人相关图像样本,在这些小雪人的照片中训练模型以使其识别出 snowman 或者 non-snowman.


