【问题标题】:loss, val_loss, acc and val_acc do not update at all over epochsloss、val_loss、acc 和 val_acc 在所有时期内都不会更新
【发布时间】:2018-02-24 17:00:16
【问题描述】:

我创建了一个用于序列分类(二进制)的 LSTM 网络,其中每个样本有 25 个时间步长和 4 个特征。以下是我的keras网络拓扑:

上图,Dense 层之后的激活层使用了 softmax 函数。我使用 binary_crossentropy 作为损失函数,使用 Adam 作为优化器来编译 keras 模型。用batch_size=256,shuffle=True,validation_split=0.05训练了模型,下面是训练日志:

Train on 618196 samples, validate on 32537 samples
2017-09-15 01:23:34.407434: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:893] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2017-09-15 01:23:34.407719: I tensorflow/core/common_runtime/gpu/gpu_device.cc:955] Found device 0 with properties: 
name: GeForce GTX 1050
major: 6 minor: 1 memoryClockRate (GHz) 1.493
pciBusID 0000:01:00.0
Total memory: 3.95GiB
Free memory: 3.47GiB
2017-09-15 01:23:34.407735: I tensorflow/core/common_runtime/gpu/gpu_device.cc:976] DMA: 0 
2017-09-15 01:23:34.407757: I tensorflow/core/common_runtime/gpu/gpu_device.cc:986] 0:   Y 
2017-09-15 01:23:34.407764: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1045] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0)
618196/618196 [==============================] - 139s - loss: 4.3489 - acc: 0.7302 - val_loss: 4.4316 - val_acc: 0.7251
Epoch 2/50
618196/618196 [==============================] - 132s - loss: 4.3489 - acc: 0.7302 - val_loss: 4.4316 - val_acc: 0.7251
Epoch 3/50
618196/618196 [==============================] - 134s - loss: 4.3489 - acc: 0.7302 - val_loss: 4.4316 - val_acc: 0.7251
Epoch 4/50
618196/618196 [==============================] - 133s - loss: 4.3489 - acc: 0.7302 - val_loss: 4.4316 - val_acc: 0.7251
Epoch 5/50
618196/618196 [==============================] - 132s - loss: 4.3489 - acc: 0.7302 - val_loss: 4.4316 - val_acc: 0.7251
Epoch 6/50
618196/618196 [==============================] - 132s - loss: 4.3489 - acc: 0.7302 - val_loss: 4.4316 - val_acc: 0.7251
Epoch 7/50
618196/618196 [==============================] - 132s - loss: 4.3489 - acc: 0.7302 - val_loss: 4.4316 - val_acc: 0.7251
Epoch 8/50
618196/618196 [==============================] - 132s - loss: 4.3489 - acc: 0.7302 - val_loss: 4.4316 - val_acc: 0.7251

... and so on through 50 epochs with same numbers

到目前为止,我还尝试使用 rmsprop、nadam 优化器和 batch_size(s) 128、512、1024,但损失、val_loss、acc、val_acc 在所有时期始终保持不变,产生的准确度在 0.72 到 0.74 范围内在我的每次尝试中。

【问题讨论】:

    标签: deep-learning keras classification


    【解决方案1】:

    softmax 激活可确保输出的总和为 1。这有助于确保在许多类中只输出一个类。

    由于您只有 1 个输出(只有一个类),这肯定是个坏主意。您可能最终得到 1 作为所有样本的结果。

    请改用sigmoid。它与binary_crossentropy 配合得很好。

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 2018-05-03
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      相关资源
      最近更新 更多