【发布时间】:2021-07-15 11:26:47
【问题描述】:
我正在尝试处理从 YOLO v5 获得的数据,它是每个检测到的对象的 4 个值(posX、posY、SizX、Sizy)的数组。现在,我知道有几个检测是相关的,我想要一个神经网络来找到这种关系。对于每个数组输入,它应该返回一个 2x4 矩阵作为输出,或者,展平后,一个大小为 8 的数组。我正在使用 Keras Sequential 模型训练 4017 个样本:
model = Sequential()
model.add(layers.Dense(256, activation="relu", name="layer1"))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(layers.Dense(592, activation="relu", name="layer2"))
model.add(Dense(8))
model.add(Activation('softmax'))
sgd = tf.keras.optimizers.SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
hist=model.fit(X, y, batch_size=48, epochs=50, validation_split=0.2)
但是我得到的结果并不好:
Epoch 20/20
80/80 [==============================] - 1s 10ms/step - loss: 0.5413 - accuracy: 0.9963 - val_loss: 0.5414 - val_accuracy: 0.9937
预测在哪里:
Input: [0.50070833 0.50070833 0.42683333 0.22983333]
Expected Output: [[0.591 0.50070833 0.04514583 0.25035417]
[0.50070833 0.34475 0.44735417 0.04514583]]
NeuralNetwork Output: [[0.28618604 0.18969838 0.00889739 0.06283922]
[0.18952993 0.09904755 0.15489812 0.00890343]]
添加/抑制层/BatchNormalization/Dropout 没有任何区别,更改损失函数/优化器只会使结果恶化。您对这个问题有什么建议或解决方案吗?
【问题讨论】:
-
你有没有想过为什么要在输出层使用 softmax 激活?以及这对预测有何影响?
-
哇!我能说什么......我唯一没有想到改变的是激活,现在使用softplus的结果几乎与预期的结果相同!非常感谢史努比博士!
-
@JavierVillena,很高兴它成功了。请随意回答您自己的问题(最好使用代码),以便其他人遇到类似问题时可以找到解决方案。
标签: python arrays machine-learning keras neural-network