【发布时间】:2020-08-25 09:26:29
【问题描述】:
这是我第一次遇到这个问题。我使用这个模型已经有一段时间了,但数据较少。问题在于,在前 3 个 epoch 中,训练花费了 11 秒/步(31k 个样本 / 128 个批量大小),而在第 4 个 epoch 中,它花费了 18 秒/步。在第五步中,大约需要 45 秒/步。我使用的是 Keras,没有做任何自定义循环恶作剧。
有人能解释一下这种放缓吗?模型没有中断。我正在使用 TF 2.3
Epoch 1/1200
248/248 [==============================] - 2727s 11s/step - loss: 2.3481 - acc: 0.3818 - top3_acc: 0.5751 - recall: 0.2228 - precision: 0.6195 - f1: 0.3239 - val_loss: 0.9020 - val_acc: 0.8085 - val_top3_acc: 0.8956 - val_recall: 0.5677 - val_precision: 0.9793 - val_f1: 0.7179
Epoch 2/1200
248/248 [==============================] - 2712s 11s/step - loss: 1.0319 - acc: 0.7203 - top3_acc: 0.8615 - recall: 0.5489 - precision: 0.9245 - f1: 0.6865 - val_loss: 0.5547 - val_acc: 0.8708 - val_top3_acc: 0.9371 - val_recall: 0.7491 - val_precision: 0.9661 - val_f1: 0.8435
Epoch 3/1200
248/248 [==============================] - 4426s 18s/step - loss: 0.7094 - acc: 0.8093 - top3_acc: 0.9178 - recall: 0.6830 - precision: 0.9446 - f1: 0.7920 - val_loss: 0.4399 - val_acc: 0.8881 - val_top3_acc: 0.9567 - val_recall: 0.8140 - val_precision: 0.9606 - val_f1: 0.8808
Epoch 4/1200
18/248 [=>............................] - ETA: 3:14:16 - loss: 0.6452 - acc: 0.8338 - top3_acc: 0.9223 - recall: 0.7257 - precision: 0.9536 - f1: 0.8240
编辑:我只是在数据的超小样本(20 项/类别)上运行此程序,并且步骤时间没有增加。 proof
编辑 2:模型摘要
Model: "functional_3"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_token (InputLayer) [(None, 300)] 0
__________________________________________________________________________________________________
masked_token (InputLayer) multiple 0 input_token[0][0]
__________________________________________________________________________________________________
tf_distil_bert_model (TFDistilB ((None, 300, 768),) 66362880 masked_token[1][0]
__________________________________________________________________________________________________
tf_op_layer_strided_slice (Tens multiple 0 tf_distil_bert_model[1][0]
__________________________________________________________________________________________________
efficientnetb5_input (InputLaye [(None, 456, 456, 3) 0
__________________________________________________________________________________________________
batch_normalization (BatchNorma (None, 768) 3072 tf_op_layer_strided_slice[1][0]
__________________________________________________________________________________________________
efficientnetb5 (Functional) (None, 15, 15, 2048) 28513527 efficientnetb5_input[0][0]
__________________________________________________________________________________________________
dense (Dense) (None, 256) 196864 batch_normalization[1][0]
__________________________________________________________________________________________________
global_average_pooling2d (Globa (None, 2048) 0 efficientnetb5[1][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 140) 35980 dense[1][0]
__________________________________________________________________________________________________
dense_3 (Dense) (None, 140) 286860 global_average_pooling2d[1][0]
__________________________________________________________________________________________________
concatenate (Concatenate) (None, 280) 0 dense_1[1][0]
dense_3[1][0]
__________________________________________________________________________________________________
dense_4 (Dense) (None, 100) 28100 concatenate[0][0]
__________________________________________________________________________________________________
dropout_20 (Dropout) (None, 100) 0 dense_4[0][0]
__________________________________________________________________________________________________
dense_5 (Dense) (None, 20) 2020 dropout_20[0][0]
==================================================================================================
Total params: 95,429,303
Trainable params: 30,120
Non-trainable params: 95,399,183
【问题讨论】:
-
你在使用回调吗?网络在训练期间的核矩阵传播总是相同的,所以它必须是你注入的某个过程。
-
@RyanCocuzzo 我只有提前停止回调。您认为这会导致这种情况吗?
-
你在做强化学习吗?如果你的更新是基于一定数量的剧集,那么在训练开始时,剧集往往很短,更新可能会很快。
-
是的,如果它不是回调并且我们假设所有 keras 代码都可以正常工作,那么这将是一个技术性很强的问题,可能是梯度爆炸式增加计算时间,或者“死”神经元在整个培训过程中以指数速度恢复活力等。这些不太可能,我希望它们不相关。
-
我认为您由于泄漏而内存不足。这导致了一些问题。这是一个示例 - datascience.stackexchange.com/questions/61224/… 在帖子中注意,OP 代码的纪元时间会逐渐增加,就像你的代码一样。 16s、18s、21s ...
标签: tensorflow keras