深度学习(三):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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 卷积神经网络是基于人工神经网络的深度机器学习方法,成功应用于图像识别领域。CNN采用了局部连接和权值共享,保持了网...
    dopami阅读 1,082评论 0 0
  • 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! 翻译论文汇总:https://github.com...
    SnailTyan阅读 12,442评论 1 27
  • 罗先生是我的初恋,是我在16岁以后,第一个爱的刻骨铭心爱的不计后果的人。初恋嘛,都是青涩的,那是的我看待初恋是一种...
    釉凉阅读 314评论 0 0
  • Gogland(精品推荐)Gogland属于jetbrains出品,异常的好用~ VSCode 马马虎虎吧,看喜好
    faceowener阅读 196评论 0 0
  • 最近,一个消息引爆了中国的吃货江湖,为什么要这么说,因为几乎所有中国人都会吃的一大美食就要退出市场了,到底是什么美...
    慕容随风阅读 5,316评论 25 57