- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下神经网络,使用 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 ...
我猜这是由于优化器陷入局部最小值,它将所有数据分配给一个类别。我怎样才能阻止它这样做?
我尝试过的事情(但似乎并没有阻止这种情况发生):
这些都没有帮助。为什么会发生这种情况和/或如何抑制它的任何其他想法?这可能是 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'])
非常感谢您的建议。
最佳答案
问题出在 sigmoid
函数作为最后一层的激活。在这种情况下,您最后一层的输出不能解释为属于单个类的给定示例的概率分布。该层的输出通常甚至不等于 1。在这种情况下,优化可能会导致意外行为。在我看来,添加 maxnorm
约束不是必需的,但我强烈建议您使用 categorical_crossentropy
而不是 mse
损失,因为已证明此函数更适合这种优化案例。
关于python - Keras 分类器的准确度在训练期间稳步上升,然后下降到 0.25(局部最小值?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41999686/
由于我正在为 iPhone 进行开发,所以我刚刚购买了 iPhone 4 来测试我的应用程序,该应用程序需要测量我的位置坐标。我的 iPhone 上没有任何互联网(3GS、GPRS 或其他...),问
我正在尝试构建一个正则表达式,对于“人类导航的浏览器”的User-Agent:计算结果为 true,但对于机器人则为 false。不用说,匹配不会精确,但如果在 90% 的情况下都能正确匹配,那就足够
我将使用 Python 中的 OpenCV 和 pytesseract 的 OCR 从图片中提取文本。我有这样一张图片: 然后我编写了一些代码来从该图片中提取文本,但它没有足够的准确性来正确提取文本。
我正在尝试使用 vars 学习向量自回归模型R 中的包。这个包没有任何方法来衡量返回模型的准确性。 具体来说,我想使用 accuracy 中定义的 MASE来自 forecast 的函数R 中的包,以
我的工作是计划使用UIMA集群运行文档以提取命名实体,而不提取命名实体。据我了解,UIMA打包的NLP组件很少。我已经测试GATE一段时间了,对此相当满意。在普通文本上还可以,但是当我们通过一些代表性
我正在使用 libSVM(带有线性内核)训练和交叉验证(10 倍)数据。 数据由 1800 个 fMRI 强度体素组成,表示为单个数据点。svm-train 的训练集文件中约有 88 个数据点。 训练
我正在运行一个很大的单元测试列表,这些单元测试正在检查各种不同的类获取和设置。我遇到了一些错误,因为我的测试运行太快?!? 举个简单的例子,单元测试从模拟一个带有评论的博客开始; Blog b = n
我正在进行一项实验,其目标是将脑电图时间序列数据分为 3 类。然而,每当我进行训练时,我的损失都是 NaN,准确度是 0.0。 我的数据有 150 步长,有 4 个 channel 。全部归一化在 0
我已经编写了一个检测 IBeacons 的应用程序(swift,IOS)。虽然我可以正确检测到另一部 iPhone 的 RSSI、准确性和接近度,但在检测到我的信标 (Qualcomm) 时,它会被发
我有包含两列的 csv 文件: category, description 文件中有 1030 个类别,只有大约 12,600 行 我需要获得一个文本分类模型,并根据这些数据进行训练。我使用 kera
问题描述 我正在阅读 François Chollet ( publisher webpage , notebooks on github ) 的“Python 中的深度学习”。复制第 6 章中的示例
我对深度学习非常陌生:我正在 Udemy 上学习深度学习类(class)。一旦我执行我的代码,它会说: ValueError:模型未配置为计算准确性。您应该将 metrics=["accuracy"]
我是一名优秀的程序员,十分优秀!