输入大小为4的数组和输出大小为8的神经网络

我正在尝试处理从YOLO v5获得的数据,这些数据是每个检测到的对象的4个值的数组(posX, posY, SizX, Sizy)。我知道多个检测之间存在关联,我希望神经网络能找到这种关联。对于每个输入数组,它应该返回一个2×4的矩阵,或者平铺后的大小为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/2080/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激活函数通常用于分类问题,你似乎不是在做分类,而是回归(因为输出是连续的,而不是离散的)。

那么你应该将输出层的激活函数改为适合的函数,比如linear(通用解决方案)或sigmoid(如果目标值在[0, 1]范围内)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注