【发布时间】:2020-11-06 04:49:08
【问题描述】:
我是 tensorflow 2.0 的新手,我正在运行一个非常简单的模型,它将固定大小(100 个值)的一维时间序列分类为两个类之一:
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(512, activation='relu', input_shape=(100, 1)),
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])
我有一个包含约 660,000 个标记示例的数据集,我以 batch_size=256 将其输入模型。当我将 NN 训练 10 个 epoch 时,使用与验证数据集相同的数据
history = model.fit(training_dataset,
epochs=10,
verbose=1,
validation_data=training_dataset)
我得到以下输出
Epoch 1/10
2573/2573 [==============================] - 55s 21ms/step - loss: 0.5271 - acc: 0.7433 - val_loss: 3.4160 - val_acc: 0.4282
Epoch 2/10
2573/2573 [==============================] - 55s 21ms/step - loss: 0.5673 - acc: 0.7318 - val_loss: 3.3634 - val_acc: 0.4282
Epoch 3/10
2573/2573 [==============================] - 55s 21ms/step - loss: 0.5628 - acc: 0.7348 - val_loss: 2.6422 - val_acc: 0.4282
Epoch 4/10
2573/2573 [==============================] - 57s 22ms/step - loss: 0.5589 - acc: 0.7314 - val_loss: 2.6799 - val_acc: 0.4282
Epoch 5/10
2573/2573 [==============================] - 56s 22ms/step - loss: 0.5683 - acc: 0.7278 - val_loss: 2.3266 - val_acc: 0.4282
Epoch 6/10
2573/2573 [==============================] - 55s 21ms/step - loss: 0.5644 - acc: 0.7276 - val_loss: 2.3177 - val_acc: 0.4282
Epoch 7/10
2573/2573 [==============================] - 56s 22ms/step - loss: 0.5664 - acc: 0.7255 - val_loss: 2.3848 - val_acc: 0.4282
Epoch 8/10
2573/2573 [==============================] - 55s 21ms/step - loss: 0.5711 - acc: 0.7237 - val_loss: 2.2369 - val_acc: 0.4282
Epoch 9/10
2573/2573 [==============================] - 55s 22ms/step - loss: 0.5739 - acc: 0.7189 - val_loss: 2.6969 - val_acc: 0.4282
Epoch 10/10
2573/2573 [==============================] - 219s 85ms/step - loss: 0.5778 - acc: 0.7213 - val_loss: 2.5662 - val_acc: 0.4282
为什么在同一数据集上运行时,训练期间的准确率与验证步骤有如此大的差异?我试图找到一些解释,但似乎当人们使用 BatchNormalization 或 Dropout 层时通常会出现此类问题,而这里不是这种情况。
【问题讨论】:
-
在您的情况下,精度较低表明模型无法按预期对时间序列进行分类。考虑使用 RNN 模型进行时间序列分类。请参阅this 文档。此外,我们也可以使用一维卷积。
-
感谢您的建议。我使用密集层的唯一原因是提供一个最小的示例。
-
在训练 NN 之前尝试对数据进行洗牌。如果这会使 acc 和 val_acc 更接近,我会解释原因,所以暂时不要假设匹配。
-
我将洗牌缓冲区从 100,000 增加到 660,000(所以这是真正的洗牌),现在准确度与验证准确度相匹配。谢谢!
标签: tensorflow keras tensorflow2.0 tf.keras