从冻结层获取输出张量

时间:2020-05-19 20:08:43

标签: python tensorflow keras transfer-learning

我正在使用转移学习来训练网络。目前,我冻结了前70层,仅在最后10层进行训练。由于数据集的大小,每个纪元需要45分钟的训练时间。如果可以的话,我想在整个网络上训练1个历元,获取最后一个冻结层的输出张量,并将其输入到训练层中,以了解需要多少个历元。

我希望这将减少训练网络所需的时间,因为本质上跳过了恒定层。

from tensorflow.keras.applications import MobileNet
from tensorflow.keras.models import Model

base_model = MobileNet(weights='imagenet', include_top=False, input_shape=(224,224,3), dropout=.2)

x = base_model.output
x = Dense(10, activation='softmax')(x)
model = Model(inputs=base_model.input,outputs=x)

for layer in model.layers[:70]:
    layer.trainable=False
for layer in model.layers[70:]:
    layer.trainable=True
...

我使用ImageDataGenerator将数据导入网络。

这是我关注的教程:https://towardsdatascience.com/transfer-learning-using-mobilenet-and-keras-c75daf7ff299

1 个答案:

答案 0 :(得分:0)

trainable = False设置为图层时,模型不会花时间训练这些图层。默认情况下会跳过不可训练的图层。

如果要提高速度,请使更多图层不可训练。

还有机会在CPU上训练模型,这比在GPU上训练要慢得多