这是一个两部分的问题:
背景:
我有一组相当小的(数千张)医学图像。我正在使用kersa.applications
没有“顶层”层的预训练模型,并在它们之上训练我自己的顶层。在达到高原性能/准确性后,我想通过制作预训练模型来“微调”trainable
问题:
由于 GPU 内存限制(Tesla T4),我无法将整个预训练模型标记为可训练的数千万个参数。选择性地选择层或块/层组并仅在微调期间使它们可训练是否有意义?
我尝试了多种方法来只使单层(而不是整个经过训练的模型)可训练,但看起来我错过了一些技巧,我得到的可训练参数的数量总结(重新编译后)没有改变.
这是我的代码的选择:
model = tf.keras.models.load_model(last_saved_model_path)
model.summary()
# prints:
# layer 0 is input
# layer 1 is the pretrained model from keras.applications
# layers after that are my layers
# and shows x number of trainable params
model.layers[1].layers[-1].trainable = True
optimizer = keras.optimizers.Adam()
model.compile(optimizer=optimizer,
loss=keras.losses.BinaryCrossentropy(),
metrics=[keras.metrics.BinaryAccuracy()])
model.summary()
# shows the same number of trainable params
我错过了什么,难道不能让另一层中的层可训练吗?