【发布时间】:2021-06-30 20:59:34
【问题描述】:
我有一个这样的二进制数据集:
| age (0-9) | age (10-19) | age (20-59) | age (10-19) | gender (male) | gender (female) | ... | desired (very much) | desired (moderate) | desired (little) | desired (None) |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 0 | 1 | ... | 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 | 0 | ... | 1 | 0 | 0 | 0 |
这里的特征是前几列,目标是最后 4 列。 我在这里尝试使用通过 tensorflow/keras 实现的 DNN 来适应这些数据。
这是我的模型和代码:
input_layer = Input(shape=(len(x_training)))
x = Dense(30,activation="relu")(input_layer)
x = Dense(20,activation="relu")(x)
x = Dense(10,activation="relu")(x)
x = Dense(5,activation="relu")(x)
output_layer = Dense(4,activation="softmax")(x)
model = Model(inputs=input_layer, outputs=output_layer)
model.compile(optimizer="sgd",
loss="categorical_crossentropy",
metrics=['accuracy'])
model.fit(x=x_train,
y=y_train,
batch_size=128,
epochs=10,
validation_data=(x_validate,y_validate))
这是培训的历史:
Epoch 1/10
2005/2005 [==============================] - 9s 4ms/step - loss: 1.3864 - accuracy: 0.2525 - val_loss: 1.3863 - val_accuracy: 0.2533
Epoch 2/10
2005/2005 [==============================] - 6s 3ms/step - loss: 1.3863 - accuracy: 0.2518 - val_loss: 1.3864 - val_accuracy: 0.2486
Epoch 3/10
2005/2005 [==============================] - 6s 3ms/step - loss: 1.3863 - accuracy: 0.2499 - val_loss: 1.3863 - val_accuracy: 0.2487
Epoch 4/10
2005/2005 [==============================] - 6s 3ms/step - loss: 1.3863 - accuracy: 0.2515 - val_loss: 1.3863 - val_accuracy: 0.2539
Epoch 5/10
2005/2005 [==============================] - 6s 3ms/step - loss: 1.3863 - accuracy: 0.2511 - val_loss: 1.3863 - val_accuracy: 0.2504
Epoch 6/10
2005/2005 [==============================] - 6s 3ms/step - loss: 1.3863 - accuracy: 0.2501 - val_loss: 1.3863 - val_accuracy: 0.2484
Epoch 7/10
2005/2005 [==============================] - 6s 3ms/step - loss: 1.3863 - accuracy: 0.2511 - val_loss: 1.3863 - val_accuracy: 0.2468
Epoch 8/10
2005/2005 [==============================] - 6s 3ms/step - loss: 1.3863 - accuracy: 0.2509 - val_loss: 1.3863 - val_accuracy: 0.2519
Epoch 9/10
2005/2005 [==============================] - 6s 3ms/step - loss: 1.3863 - accuracy: 0.2505 - val_loss: 1.3863 - val_accuracy: 0.2463
Epoch 10/10
2005/2005 [==============================] - 6s 3ms/step - loss: 1.3863 - accuracy: 0.2512 - val_loss: 1.3863 - val_accuracy: 0.2474
<tensorflow.python.keras.callbacks.History at 0x7f6893c61e90>
准确率和损失完全没有变化,我尝试了以下实验,都给出了相同的结果:
- 将隐藏层激活更改为
sigmoid、tanh - 将最后一层更改为只有一个节点,将
y_train标记为 (1,2,3) 而不是一种热编码,并将损失函数更改为稀疏分类交叉熵 - 将优化器更改为 Adam
- 将数据更改为 (-1,1) 而不是 (0,1)
我在这里错过了什么?
【问题讨论】:
-
您是否尝试过将 epoch 的数量增加(至少)10 或 100 倍?
-
@Hagbard 我刚刚尝试过,仍然没有改进
-
@gobrewers14 我试过 lr=0.01、lr=0.001 和 lr=0.1 都给出了相同的结果
-
什么是
x_training(用于Input层),它与x_train有何不同? -
@desertnaut
x_train是一个长度为 22 的特征列表。和x_training = x_train[0]
标签: tensorflow keras deep-learning neural-network classification