我正在使用转移学习来训练网络。目前,我冻结了前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
答案 0 :(得分:0)
将trainable = False
设置为图层时,模型不会花时间训练这些图层。默认情况下会跳过不可训练的图层。
如果要提高速度,请使更多图层不可训练。
还有机会在CPU上训练模型,这比在GPU上训练要慢得多