classification神经网络的主要结构
数据的导入
import numpy as np
np.random.seed(1337)
from keras.models import Sequential
from keras.layers import Dense,Activation
from keras.utils import np_utils
from keras.optimizers import RMSprop
#导入MNIST数据库
(x_train,y_train),(x_test,y_test) = mnist.load_data()
关于mnist数据库中的数据的格式的介绍
利用上述方式到处的x的数据是60000个28x28数组,也就是一共有784个像素点的一张张的图片
y得到的是每一张图片的标签
数据预处理
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,nb_classes=10)
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之间的任意一个数),数据的较大的差别对于最终结果的影响也会非常大,神经网络模型就需要很多次的训练来对这个数值不断逼近,直接加大了计算机的计算量,所以我们需要将数据进行特征标准化,将数据缩小到一定的范围之内,减轻计算机负担
神经网络层的添加
model = Sequential([
Dense(32,input_dim=784),
Activation('relu'),
Dense(10),
Activation('softmax')
])
rmsprop 优化器的设置
rmsprop = RMSprop(lr=0.001,rho=0.9,epsilon=le-08,decay=0.0)
model的激活
model.compile(optimizer=rmsprop,loss='categorical_crossentropy',metrics=['accuracy'])#在解决分类问题时常常使用catogorical_crossentropy这个loss_function
metrics=[‘accuracy’]参数表示在model运行的时候还需要计算的一些数值
Training————————-
print('Training---------')
model.fit(x_train,y_train,nb_epoch=2,batch_size=32)
#该句表示输入的训练数值为x_train和y_train,训练2次,每一批次训练的大小为32
Testing—————————
print('\ntesting----------')
loss,accuracy=model.evaluate(x_test,y_test)#由于在model.compile的阶段,添加了accuracy的计算,所以也需要在接收端添加一个变量值来接受accuracy
print('test loss:',loss)
print('test accuracy:',accuracy)