我有一组包含80个样本的数据,格式如下。我需要预测两个参数:延迟和准确率
No Model Technique Latency Accuracy0 1 Net Repartition 31308.4 0.99 1 2 Net Connection 30338.2 0.79 2 3 MobiNet Repartition 20360.1 0.89 predictors=data.drop(['Latency','Accuracy'], axis = 1) target=data[['Latency', 'Accuracy']] predictors_cat_converted=pd.get_dummies(predictors, prefix=['Model', 'Technique']) pre_norms = (predictors_cat_converted-predictors_cat_converted.mean()/predictors_cat_converted.std()) def regression(): model=Sequential() model.add(Dense(50, activation= 'relu',input_shape=(n_cols,))) model.add(Dense(50, activation='relu'))#hidden layer model.add(Dense(2))#output model.compile(optimizer='adam',loss='mean_squared_error') return model model=regression() model.fit(pre_norms, target,validation_split=.3,epochs=100,verbose=1)
输出显示损失值非常高
Epoch 1/100 2/2 [==============================] - 1s 275ms/step - loss: 256321162.6667 - val_loss: 262150224.0000 Epoch 2/100 2/2 [==============================] - 0s 23ms/step - loss: 246612645.3333 - val_loss: 262146176.0000 Epoch 3/100 2/2 [==============================] - 0s 22ms/step - loss: 251778928.0000 - val_loss: 262142000.0000 Epoch 4/100 2/2 [==============================] - 0s 26ms/step - loss: 252470826.6667 - val_loss: 262137664.0000 Epoch 5/100 2/2 [==============================] - 0s 25ms/step - loss: 255799392.0000 - val_loss: 262133200.0000 Epoch 6/100
回答:
你的数据量非常少,只有2列,80行和2个目标变量。你可以做的有以下几点:
- 增加更多的数据。
- 对数据进行归一化处理,然后输入到神经网络中。
- 如果神经网络的准确率不理想,可以尝试使用随机森林或XGBoost。
另外,我还想指出一点,你的神经网络架构有问题。使用带有2个输出的Dense层和softmax激活函数在这里不会得到好的结果。你需要使用TensorFlow的Functional API
,构建一个1输入2输出的神经网络架构。