classification神经网络的主要结构

数据的导入

  1. import numpy as np
  2. np.random.seed(1337)
  3. from keras.models import Sequential
  4. from keras.layers import Dense,Activation
  5. from keras.utils import np_utils
  6. from keras.optimizers import RMSprop
  7. #导入MNIST数据库
  8. (x_train,y_train),(x_test,y_test) = mnist.load_data()

关于mnist数据库中的数据的格式的介绍

利用上述方式到处的x的数据是60000个28x28数组,也就是一共有784个像素点的一张张的图片
y得到的是每一张图片的标签

数据预处理

  1. x_train = x_train.reshape(x_train.shape[0],-1)/255
  2. x_test = x_test.reshape(x_test.shape[0],-1)/255
  3. y_train = np_utils.to_categorical(y_train,nb_classes=10)
  4. y_test = np_utils.to_categorical(y_test,nb_classes=10)

将所得到的x_data转化为一个60000x784的数据集,然后再将其除以255,使得点的数在0到1之间

数据特征标准化的必要性

  • 要理解这个问题,首先要了解机器学习的原理

机器学习的原理为,机器学习通过所传入的值通过神经网路的逐层处理,得到一个预测值,输出值往往会遵守一个线性回归方程,其中会有多个参数,像权重和偏差(即weight和biases)。机器要做的就是通过计算预测值和真实值之间的差距(loss或者cost)通过选择不同的优化器(optimizer)来将这个差距尽可能的减小,通过多次的训练处理,最终确定线性回归方程的各个参数的大小。需要注意机器学习的差距往往是不可避免的,无法做到100%的正确率。只能够通过不断的训练来减小差距,来提升正确率。

  • 数据处理的必要性

在机器学习过程中一部分的数据的跨度十分的大(像对于图片的像素点,数据可以时0到225之间的任意一个数),数据的较大的差别对于最终结果的影响也会非常大,神经网络模型就需要很多次的训练来对这个数值不断逼近,直接加大了计算机的计算量,所以我们需要将数据进行特征标准化,将数据缩小到一定的范围之内,减轻计算机负担

神经网络层的添加

  1. model = Sequential([
  2. Dense(32,input_dim=784),
  3. Activation('relu'),
  4. Dense(10),
  5. Activation('softmax')
  6. ])

rmsprop 优化器的设置

  1. rmsprop = RMSprop(lr=0.001,rho=0.9,epsilon=le-08,decay=0.0)

model的激活

  1. model.compile(optimizer=rmsprop,loss='categorical_crossentropy',metrics=['accuracy'])#在解决分类问题时常常使用catogorical_crossentropy这个loss_function

metrics=[‘accuracy’]参数表示在model运行的时候还需要计算的一些数值

Training————————-

  1. print('Training---------')
  2. model.fit(x_train,y_train,nb_epoch=2,batch_size=32)
  3. #该句表示输入的训练数值为x_train和y_train,训练2次,每一批次训练的大小为32

Testing—————————

  1. print('\ntesting----------')
  2. loss,accuracy=model.evaluate(x_test,y_test)#由于在model.compile的阶段,添加了accuracy的计算,所以也需要在接收端添加一个变量值来接受accuracy
  3. print('test loss:',loss)
  4. print('test accuracy:',accuracy)