【问题标题】:Neural Network with an input array of size 4 and output array of size 8具有大小为 4 的输入数组和大小为 8 的输出数组的神经网络
【发布时间】: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


【解决方案1】:

输出处的Softmax激活用于分类问题,你好像不是在做分类,而是回归(因为输出是连续的,不是离散的)。

然后您应该将输出中的激活更改为适当的值,例如linear(通用解决方案)或sigmoid(如果目标在 [0, 1] 范围内)。

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 2021-04-05
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多