keras教程【1】编写多层感知机mlp

1.导包

keras.datasets: 包含多种常用数据集,实现自动下载和解析等;
keras.models:包含各种模型结构,1)顺序模型Sequential;
keras.layers:包含常用的层结构,1)全连接层Dense;2)Dropout;3)Flatten;4)Conv2D;5)MaxPooling2D.
kears.optimizers:包含优化函数,1)adam;2)RMSprop.

2.数据输入

mlp接收输入数据格式:一维向量。
当数据格式不符合条件时,需要进行格式转换,直接使用reshape即可。

3.特征预处理。

1)是否归一化。
比如将图像数据需要经过x/255(即像素数据归一化到0-1)。这样处理的原因是:图像的归一化使得图像可以抵抗几何变换的攻击,它能够找出图像中的那些不变量,从而得知这些图像原本就是一样的或者就是一个系列的。

归一化的作用:
归一化就是将有量纲的表达式,经过变换,变为无量纲的表达式。其优点有 a. 避免具有不同无物理意义和量纲的输入变量不能平等使用;b. 归一化在sigmoid函数作为激活函数时,可以防止输入绝对值过大引起的神经元输出饱和的现象;c.归一化在神经网络应用中,是为了加快训练网络的收敛性;

4.标签预处理.

1)分类标签
label转换为one-hot标签:可使用keras.utils.to_categorical.

y_train = keras.utils.to_categorical(y_train, 10).

2)回归标签。
在回归问题中,当特征数据进行归一化的时候,label为具体数值型,同样可以对label数据进行归一化处理。

5.构建模型结构。

假设我们现在构建一个顺序结构的模型,包括2个隐藏层(采用relu激活函数),1个输出层,且都是全连接层,构建完以后可以使用model.summary()来打印结构。

model = Sequential()
model.add(Dense(512, activation = ‘relu’, input_shape=(784,))).
model.add(Dropout(0.2)).
model.add(Dense(512, activation = ‘relu’)).
model.add(Dropout(0.2)).
model.add(Dense(10, activation = ‘softmax’)).

6.优化目标。

1)优化器:使用optimizer定义。
2)损失定义:分类问题中常用交叉熵categorical_crossentropy。回归问题中常用mse。
3) 指定在训练及测试中关注的指标:设定metrics,一般地,设置metrics=[‘accuracy’].

model.compile(loss='categorical_crossentropy',  
              optimizer = RMSprop(),  
              metrics = ['accuracy']).   

7.开始训练。

可以直接使用model.fit来进行训练。其中,有几个参数需要配置:
1)batch_size:表示每个epoch中训练的样本数量。
2)epochs:表示训练的轮数(epochs).
3)verbose:表示以何种方式显示输出信息,0表示不输出,1表示输出全部日志,2表示每个epoch输出一次日志。
4)validation_data: 可为空(即不设置),表示验证集。当该参数不为空时,每个epoch过后就会输出验证集的loss和accuracy.

model.fit(x_train, y_train, batch_size = 64, 
          epochs = 2,
          verbose = 1,
          validation_data = (x_test, y_test))

8.测试结果。

使用model.evaluate测试时,输出之前compile模型时指定的metrics类型,本例中是accuracy.

 score = model.evaluate(x_test, y_test, verbose=1)    
 print('Test loss:', score[0]).  
 print('Test accuracy',score[1]).  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章