我有以下神经网络,使用Tensorflow作为后端用Keras编写,我在Windows 10的Python 3.5(Anaconda)上运行:

model = Sequential()

model.add(Dense(100, input_dim=283, init='normal', activation='relu'))

model.add(Dropout(0.2))

model.add(Dense(150, init='normal', activation='relu'))

model.add(Dropout(0.2))

model.add(Dense(200, init='normal', activation='relu'))

model.add(Dropout(0.2))

model.add(Dense(200, init='normal', activation='relu'))

model.add(Dropout(0.2))

model.add(Dense(200, init='normal', activation='relu'))

model.add(Dropout(0.2))

model.add(Dense(4, init='normal', activation='sigmoid'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

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

我正在使用我的GPU进行训练.在训练期间(10000个纪元),幼稚网络的准确性从0.25稳步提高到0.7到0.9之间,然后突然下降并保持在0.25:

Epoch 1/10000

6120/6120 [==============================] - 1s - loss: 1.5329 - acc: 0.2665

Epoch 2/10000

6120/6120 [==============================] - 1s - loss: 1.2985 - acc: 0.3784

Epoch 3/10000

6120/6120 [==============================] - 1s - loss: 1.2259 - acc: 0.4891

Epoch 4/10000

6120/6120 [==============================] - 1s - loss: 1.1867 - acc: 0.5208

Epoch 5/10000

6120/6120 [==============================] - 1s - loss: 1.1494 - acc: 0.5199

Epoch 6/10000

6120/6120 [==============================] - 1s - loss: 1.1042 - acc: 0.4953

Epoch 7/10000

6120/6120 [==============================] - 1s - loss: 1.0491 - acc: 0.4982

Epoch 8/10000

6120/6120 [==============================] - 1s - loss: 1.0066 - acc: 0.5065

Epoch 9/10000

6120/6120 [==============================] - 1s - loss: 0.9749 - acc: 0.5338

Epoch 10/10000

6120/6120 [==============================] - 1s - loss: 0.9456 - acc: 0.5696

Epoch 11/10000

6120/6120 [==============================] - 1s - loss: 0.9252 - acc: 0.5995

Epoch 12/10000

6120/6120 [==============================] - 1s - loss: 0.9111 - acc: 0.6106

Epoch 13/10000

6120/6120 [==============================] - 1s - loss: 0.8772 - acc: 0.6160

Epoch 14/10000

6120/6120 [==============================] - 1s - loss: 0.8517 - acc: 0.6245

Epoch 15/10000

6120/6120 [==============================] - 1s - loss: 0.8170 - acc: 0.6345

Epoch 16/10000

6120/6120 [==============================] - 1s - loss: 0.7850 - acc: 0.6428

Epoch 17/10000

6120/6120 [==============================] - 1s - loss: 0.7633 - acc: 0.6580

Epoch 18/10000

6120/6120 [==============================] - 4s - loss: 0.7375 - acc: 0.6717

Epoch 19/10000

6120/6120 [==============================] - 1s - loss: 0.7058 - acc: 0.6850

Epoch 20/10000

6120/6120 [==============================] - 1s - loss: 0.6787 - acc: 0.7018

Epoch 21/10000

6120/6120 [==============================] - 1s - loss: 0.6557 - acc: 0.7093

Epoch 22/10000

6120/6120 [==============================] - 1s - loss: 0.6304 - acc: 0.7208

Epoch 23/10000

6120/6120 [==============================] - 1s - loss: 0.6052 - acc: 0.7270

Epoch 24/10000

6120/6120 [==============================] - 1s - loss: 0.5848 - acc: 0.7371

Epoch 25/10000

6120/6120 [==============================] - 1s - loss: 0.5564 - acc: 0.7536

Epoch 26/10000

6120/6120 [==============================] - 1s - loss: 0.1787 - acc: 0.4163

Epoch 27/10000

6120/6120 [==============================] - 1s - loss: 1.1921e-07 - acc: 0.2500

Epoch 28/10000

6120/6120 [==============================] - 1s - loss: 1.1921e-07 - acc: 0.2500

Epoch 29/10000

6120/6120 [==============================] - 1s - loss: 1.1921e-07 - acc: 0.2500

Epoch 30/10000

6120/6120 [==============================] - 2s - loss: 1.1921e-07 - acc: 0.2500

Epoch 31/10000

6120/6120 [==============================] - 1s - loss: 1.1921e-07 - acc: 0.2500

Epoch 32/10000

6120/6120 [==============================] - 1s - loss: 1.1921e-07 - acc: 0.2500 ...

我猜这是由于优化器陷入了局部最小值,该最小值将所有数据分配到一个类别.我如何禁止它这样做?

我尝试过的事情(但似乎并没有阻止这种情况的发生):

>使用其他优化器(adam)

>确保培训数据包括每个类别中相同数量的示例

>增加培训数据量(目前为6000)

>在2到5之间变化类别的数量

>将网络中的隐藏层数从1增加到5

>更改图层宽度(从50到500)

这些都没有帮助.还有其他想法为什么会发生和/或如何抑制呢?难道是Keras中的错误?非常感谢您的任何建议.

编辑:

通过将最终激活更改为softmax(从sigmoid)并向最后两个隐藏层添加maxnorm(3)正则化,似乎已解决了该问题:

model = Sequential()

model.add(Dense(100, input_dim=npoints, init='normal', activation='relu'))

model.add(Dropout(0.2))

model.add(Dense(150, init='normal', activation='relu'))

model.add(Dropout(0.2))

model.add(Dense(200, init='normal', activation='relu'))

model.add(Dropout(0.2))

model.add(Dense(200, init='normal', activation='relu', W_constraint=maxnorm(3)))

model.add(Dropout(0.2))

model.add(Dense(200, init='normal', activation='relu', W_constraint=maxnorm(3)))

model.add(Dropout(0.2))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

model.add(Dense(ncat, init='normal', activation='softmax'))

model.compile(loss='mean_squared_error', optimizer=sgd, metrics=['accuracy'])

非常感谢您的建议.

python训练手势分类器_python-Keras分类器的准确性在训练过程中稳定...相关推荐

  1. python吃显卡还是内存不足_解决pytorch GPU 计算过程中出现内存耗尽的问题

    Pytorch GPU运算过程中会出现:"cuda runtime error(2): out of memory"这样的错误.通常,这种错误是由于在循环中使用全局变量当做累加器, ...

  2. python输入数据的维度_python – Keras LSTM输入维度设置

    我试图用keras训练LSTM模型,但我觉得我在这里弄错了. 我收到了错误 ValueError: Error when checking input: expected lstm_17_input ...

  3. python和手势控制_Python手势识别与控制

    # Python手势识别与控制 ## 概述 本文中的手势识别与控制功能主要采用 [OpenCV](https://opencv.org/) 库实现, OpenCV是一个基于BSD许可(开源)发行的跨平 ...

  4. python制作二级菜单_python实现二级登陆菜单及安装过程

    python实现二级登陆菜单的代码如下所示: """ 1.三级菜单 注册 登陆 注销 2.进入每一个一级菜单,都会有下一级的菜单 """ u ...

  5. python有趣的工具_python好玩的小工具(正在create中)

    思路:(可以不用key value来做,本次也没用到) 0)先创建new.xlsx 复制test.xlsx的所有内容,放到new.xlsx里 ,并 以key ,value的形式存base.xlsx数据 ...

  6. python自定义函数画图_python matplotlib自定义colorbar颜色条-以及matplotlib中的内置色条...

    自定义colorbar(draw colorbar without any mapple/plot) 参考:Customized Colorbars Tutorial api example code ...

  7. python动态图表变化_Python数据可视化 pyecharts实现各种统计图表过程详解

    Python数据可视化 pyecharts实现各种统计图表过程详解 发布时间:2020-09-10 04:53:26 来源:脚本之家 阅读:78 1.pyecharts介绍 Echarts是一款由百度 ...

  8. python six库安装_Python 安装matplotlib,six,dateutil,pyparsing 完整过程

    因为matplotlib 需要依赖许多其他科学计算的第三方库,需要一个一个的安装了.. 1, 安装matplotlib 官网直接下载:http://matplotlib.sourceforge.net ...

  9. python pandas筛选数据_Python pandas从字符串列的数据选择中筛选出nan

    放下它们:nms.dropna(thresh=2) 这将删除至少有两个非-NaN的所有行. 然后您可以删除名称所在的位置NaN:In [87]: nms Out[87]: movie name rat ...

最新文章

  1. 沈向洋、黄学东等大咖助阵,IoT in Action微软深圳物联网大会即刻报名
  2. Binder跨进程通信原理(三):Binder IPC实现原理
  3. BlockChain:《Blockchain Gate》听课笔记——区块链构筑的比特世界 VS 现实的原子世界
  4. 用编码实现gridview的创建!(一)(转www.asp.net)
  5. qt5中服务器文件传输,POST在Qt5中发送JSON文件的请求
  6. 阿里云、百度云被约谈 督促落实防范治理电信网络诈骗
  7. 汇编 align_从零开始自制操作系统(5):实模式汇编(二)
  8. 开启和关闭HBase的thrift进程
  9. 我在百度运维的成长经历 之五
  10. 2021如何运行带flash的html,2021年Flash被禁用后继续使用的方法
  11. PS黑作坊人像磨皮 精修 快速伪商业修图 插件 扩展面板
  12. wps桌面右键缺少新建文档入口
  13. 【Elasticsearch教程20】Pinyin拼音分词器 以及多音字修改
  14. python 马赛克拼图_用几十万张图片来拼图!Open CV牛逼不是没有道理的!马赛克拼图...
  15. 台式机没声音怎么样才能解决
  16. 36小时阿里大佬用了讲完的Java,整整372集,分分钟白嫖!!
  17. iOS编程------SQLite / 数据库
  18. 马氏距离例题详解(全网最详细)
  19. 基于蓝牙协议的无线网络化传感器设计
  20. codeforces1437C. Chef Monocarp

热门文章

  1. c语言转义字符_C语言啊中的转义符有什么含义?
  2. git 忽略__pycache___容易被忽略的 Python 命令行参数
  3. 计算机涉及数学知识点,初二数学知识点归纳
  4. android 拍照屏幕大小,Android Camera 找出屏幕的最佳尺寸大小
  5. OpenCV与图像处理学习十二——图像形状特征之HOG特征
  6. 求5阶矩阵其对角线上所有元素之和
  7. Android之Fragment(二)
  8. 安卓逆向_10 --- Log 日志的插入和分析、toast方法、栈跟踪
  9. Spring Data JPA事务管理
  10. Jackson第二篇【从JSON字符串中取值】