machine-learning - Keras 模型训练精度在训练时急剧下降
问题描述
我正在使用 Keras 训练基于深度 CNN 的神经网络,直到第 16 个 epoch 的训练准确度为 90%。它在第 17 个 epoch 大幅下降到 40%,然后在下一个 epoch 下降到 3%,并保持不变,直到训练结束。是什么原因造成的?
这是我的模型架构:
## input layer
input_layer = Input((S, S, L, 1))
## convolutional layers
conv_layer1 = Conv3D(filters=8, kernel_size=(3, 3, 7), activation='relu', padding = 'same')(input_layer)
conv_layer2 = Conv3D(filters=16, kernel_size=(3, 3, 5), activation='relu', padding = 'same')(conv_layer1)
conv_layer3 = Conv3D(filters=32, kernel_size=(3, 3, 3), activation='relu', padding = 'same')(conv_layer2)
print(conv_layer3._keras_shape)
conv3d_shape = conv_layer3._keras_shape
conv_layer3 = Reshape((conv3d_shape[1], conv3d_shape[2], conv3d_shape[3]*conv3d_shape[4]))(conv_layer3)
conv_layer4 = Conv2D(filters=64, kernel_size=(3,3), activation='relu')(conv_layer3)
flatten_layer = Flatten()(conv_layer4)
## fully connected layers
dense_layer1 = Dense(units=256, activation='relu')(flatten_layer)
dense_layer1 = Dropout(0.4)(dense_layer1)
dense_layer2 = Dense(units=128, activation='relu')(dense_layer1)
dense_layer2 = Dropout(0.4)(dense_layer2)
output_layer = Dense(units=output_units, activation='softmax')(dense_layer2)
我将添加培训的屏幕截图:
对此,我有两个问题:
- 发生这种情况的可能原因是什么?
- 我怀疑信息可能不正确。我已经设置了一个检查点,所以只会保存最好的权重。训练模型大约需要 16 个小时。有没有办法我仍然可以获得最后一个时期的训练权重,即检查点仍然存在时不是最好的权重?
解决方案
- 在第 17 个 epoch 你的损失是 nan
- 除了从保存的重量中加载之外,不可能恢复重量
推荐阅读
- dm-script - 如何读取线路配置文件中的校准
- mysql - 加入另一个表和同一个表
- mysql - 在 SQL 列中连接选择
- ibm-mq - 无法在 IBM MQ 7.5 中创建消息队列
- r - 根据行中的值从列中选择行
- android - 在为运行时权限按下允许按钮时,它没有调用操作方法吗?
- testing - 如何仅使用静态常量(伴随对象常量)获得 Kotlin 类的测试覆盖率
- node.js - WebSockets:拒绝握手客户端使用的错误协议(nodejs)
- python - 无法使用 pandas 从 hdf5 文件中读取数据:AssertionError:无法解释 [void64] 的 dtype
- javascript - Module.exports 函数为变量返回“未定义”