- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 keras 创建一个卷积神经网络,以尝试将图像分为两个不同的类别,并且出于某种原因,在第一个纪元之后,准确性永远不会改变。
在使用 Keras 的 to_categorical()
之后,我的标签看起来像:
[[0. 1.]
[1. 0.]
[1. 0.]
[0. 1.]]
我模型的代码是:
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=[5, 5], strides=1, padding='same', activation='relu', input_shape=(imageSize, imageSize, 3)))
model.add(MaxPooling2D())
model.add(Conv2D(filters=64, kernel_size=[5, 5], strides=1, padding='same', activation='relu'))
model.add(MaxPooling2D())
model.add(Flatten())
model.add(Dense(2))
sgd = SGD() # Use stochastic gradient descent for now
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
model.summary()
counter = 0
# Train one cycle at a time so we can shuffle data inbetween
for x in range(trainingEpochs):
counter += 1
print() # New line
print('Epoch ' + str(counter))
trainingImages, trainingLabels = shuffle(trainingImages, trainingLabels, random_state=0) # Shuffle both sets in unison
model.fit(x=trainingImages, y=trainingLabels, batch_size=32, epochs=1, verbose=2)
此代码产生输出:
Epoch 1
36s - loss: 5.0770 - acc: 0.3554
Epoch 2
36s - loss: 4.9421 - acc: 0.3066
Epoch 3
36s - loss: 4.9421 - acc: 0.3066
Epoch 4
36s - loss: 4.9421 - acc: 0.3066
到目前为止,我已经尝试过更改批量大小、使用 binary_crossentropy、更改洗牌方法、更改卷积参数、使用黑白照片而不是 RGB、使用不同大小的图片、使用 ADAM 而不是 SGD,以及使用SGD 的学习率较低,但这些都没有解决问题。我不知所措,有没有人有任何想法?
编辑:如果重要的话,trainingImages 的形状为 (287, 256, 256, 3)。
最佳答案
症状是训练损失相对较早地停止改善。假设您的问题完全可以学习,这种行为的原因有很多。这些在我的脑海中:
神经网络更喜欢零均值的输入。例如,如果输入全部为正,它将限制权重在同一方向上更新,这可能是不可取的 (https://youtu.be/gYpoJMlgyXA)。
因此,您可能希望从所有图像中减去均值(例如,从 3 个 channel 中的每一个 channel 中减去 127.5)。缩放以使每个 channel 中的单位标准偏差也可能有帮助。
网络对于任务来说不够复杂或不够深。
这很容易检查。您可以仅在几张图像上训练网络(比如 3 到 10 张)。网络应该能够过度拟合数据并将损失几乎降低到 0。如果不是这种情况,您可能必须添加更多层,例如使用超过 1 个密集层。
另一个好主意是使用预训练权重(在 Keras 文档的应用程序中)。您可以调整顶部的密集层以适应您的问题。
不正确的权重初始化会阻止网络收敛(https://youtu.be/gYpoJMlgyXA,与之前的视频相同)。
对于 ReLU 激活,您可能希望使用 He 初始化而不是默认的 Glorot 初始化。我发现这有时可能是必要的,但并非总是如此。
最后,您可以使用 Keras 的调试工具,例如 keras-vis、keplr-io、deep-viz-keras。它们对于打开卷积网络的黑匣子非常有用。
关于python - 神经网络在一个时代后变平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44769630/
我想通过添加一个带有 transition = 0s 的类但更改颜色来使用 jQuery 运行 CSS 动画,然后立即删除该类(使用原始 transition = 2s)它逐渐变为原始颜色。 下面是我
最近两年,互联网+的概念可谓十分火爆。所谓“互联网+”,其实质就是把互联网大平台和各行各业进行有机结合,建立一个新的商业生态,对于传统企业来说,互联网+的第一步就是有一个企业网站,将自己推广出去
每天我都更喜欢 Postgres,今天我发现了函数“age”。它不仅选择年份,还选择月份和日期。太棒了! 46 years 10 mons 18 days 现在我想知道是否有一个函数可以定义“年”、“
我正在 秒 内从服务器接收数据,我想将其转换为最新数据。 但我收到的秒数不是自 UNIX 纪元 01/01/1970 以来,而是 01/01/2000。 通常我会使用: SimpleDateForma
如果在 matlab 中使用可变时间步长求解器,例如 ODE45 - 我将为输出定义一个时间跨度,即 times = [0 50],matlab 将返回不同时间步长的结果介于 0 和 50 之间。 但
因此,System.currentTimeMillis 以 UTC 时区返回毫秒。 DateTime.getmillis 是否与我所知道的几乎所有图书馆都一样,因为纪元总是在 UTC 中? joda-
Hadoop 2.0 引入了 YARN,取代了 Job Tracker 和 Task Tracker 的任务。 YARN 由资源管理器(调度器、应用程序管理器...)、节点管理器和应用程序管理器组成。
在 ViewModel 和 one activity multiple fragments 概念时代,Activity 与 Fragment 中放置 Toasts、Snackbars 有什么建议。 很
许多 Android 讨论都集中在(显然是著名的)Fingerpaint 示例上: https://stackoverflow.com/a/16650524/294884 我从哪里得到它,与 Andr
在(最终)向我的 Facebook 应用程序添加一些分析并意识到英语在我的用户语言列表中排名靠后后,我开始研究 official docs on internationalization . 但是,文
我是一名优秀的程序员,十分优秀!