【发布时间】:2023-03-19 04:53:01
【问题描述】:
我是迁移学习的新手,我在如何设置代码方面遇到了一些问题。我还阅读了其他类似问题的帖子,但这些都没有帮助我解决我的问题。
我已经在自己获得的大型数据集上从头开始训练 CNN。为此,我只将权重保存在 hdf5 文件中。
现在,我想使用相同的 CNN 架构来构建一个模型,用于对其他数据进行分类,但可用的数据较少。
这是新模型的架构:
# Input
inputs = Input(shape =(200, 1), name = 'ip_inputs')
# Feature Extraction
conv1 = Conv1D(40, 3, kernel_initializer = 'he_normal', activation = 'relu', strides = 2, padding = 'same', name = 'ip_C1') (inputs)
batchnorm1 = BatchNormalization(name = 'ip_BN1') (conv1)
# Flatten
flatten = Flatten(name = 'ip_F') (batchnorm1)
# Classification
dense1 = Dense(300, activation = 'relu', kernel_initializer = 'he_normal', name = 'ip_FC1') (flatten)
dropout1 = Dropout(0.4, name = 'D1') (dense1)
dense2 = Dense(300, activation = 'relu', kernel_initializer = 'he_normal', name = 'ip_FC2') (dropout1)
dropout2 = Dropout(0.3, name = 'D2') (dense2)
predictions = Dense(16, activation='softmax', kernel_initializer = 'he_normal', name = 'ip_FC6') (dropout2)
# Model
model = Model(inputs=inputs, outputs=predictions)
我从头开始训练的旧模型具有相似的架构,但输入和输出形状不同。
与
model.load_weights(weights_path, by_name = True)
我加载了我之前保存的权重。
但是,我不知道如何正确地进行迁移学习。有人可以就以下问题提出一些建议:
- 我应该为哪些层加载权重?仅适用于 Conv 层还是也适用于其他层?
- 我必须为哪些层设置
trainable = false?
感谢您的建议!
【问题讨论】: