深度学习(三):Keras初探:多层感知机

之前使用Keras构建了简单的前馈神经网络,并通过SGD方式进行训练,很好地已完成红酒分类任务。现在我们通过复杂一些的任务来看看BP神经网络的性能。我们选择mnist手写数字库来进行测试,Keras包含了这个数据库,可以通过下面的方式来调用此数据库:

#通过Keras导入mnist数据库
from keras.datasets import mnist
# keras中的mnist数据集已经被划分成了60,000个训练集,10,000个测试集的形式
(X_train, y_train), (X_test, y_test) = mnist.load_data()

读取数据并且构建Keras所需的训练集和测试集(张量)之后,开始构建神
经网络:

  • 多层感知机(增加dropout层)

      model.add(Dense(256, activation='relu', input_dim=784))
      model.add(Dropout(0.2))
      model.add(Dense(256, activation='relu'))
      model.add(Dropout(0.2))
      model.add(Dense(10, activation='softmax'))
    
  • 多层感知机

      model.add(Dense(256, activation='relu', input_dim=784))
      model.add(Dense(256, activation='relu'))
      model.add(Dense(10, activation='softmax'))
    
  • 简单前馈神经网络

    model.add(Dense(256, activation='relu', input_dim=784))
    model.add(Dense(10, activation='softmax'))

之后通过编译训练,就可以分别得到不同神经网络的分类结果。

    sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
    model.compile(loss='categorical_crossentropy',
          optimizer=sgd,
          metrics=['accuracy'])
    hist=model.fit(train_x_scaled, y_train,
      epochs=20,
      batch_size=10,validation_data=(test_x_scaled, y_test))

结果分析:比较图2、图3可以看到多层感知机要比简单前馈神经网络出现过拟合现象(虽然都不算很明显),而图1和图2相比较,可以看出增加dropout层之后的多层感知机出现过拟合现象更晚,说明dropout对过拟合是有一定抑制作用的。

多层感知机+dropout层
多层感知机
简单前馈神经网络

最后比较一下,三种神经网络的性能,比较明显多层感知器+dropout层要优化其它两种神经网络。(虽然相差不多)

性能比较

完整的程序和数据:下载
欢迎访问我的博客monte3card's blog

推荐阅读更多精彩内容