gpt4 book ai didi

python - 神经网络在一个时代后变平

转载 作者:行者123 更新时间:2023-11-28 19:42:32 25 4
gpt4 key购买 nike

我正在使用 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)。

最佳答案

症状是训练损失相对较早地停止改善。假设您的问题完全可以学习,这种行为的原因有很多。这些在我的脑海中:

  1. 输入预处理不当:

神经网络更喜欢零均值的输入。例如,如果输入全部为正,它将限制权重在同一方向上更新,这可能是不可取的 (https://youtu.be/gYpoJMlgyXA)。

因此,您可能希望从所有图像中减去均值(例如,从 3 个 channel 中的每一个 channel 中减去 127.5)。缩放以使每个 channel 中的单位标准偏差也可能有帮助。

  1. 网络的泛化能力:

网络对于任务来说不够复杂或不够深。

这很容易检查。您可以仅在几张图像上训练网络(比如 3 到 10 张)。网络应该能够过度拟合数据并将损失几乎降低到 0。如果不是这种情况,您可能必须添加更多层,例如使用超过 1 个密集层。

另一个好主意是使用预训练权重(在 Keras 文档的应用程序中)。您可以调整顶部的密集层以适应您的问题。

  1. 权重初始化不当。

不正确的权重初始化会阻止网络收敛(https://youtu.be/gYpoJMlgyXA,与之前的视频相同)。

对于 ReLU 激活,您可能希望使用 He 初始化而不是默认的 Glorot 初始化。我发现这有时可能是必要的,但并非总是如此。

最后,您可以使用 Keras 的调试工具,例如 keras-vis、keplr-io、deep-viz-keras。它们对于打开卷积网络的黑匣子非常有用。

关于python - 神经网络在一个时代后变平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44769630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com