参考 此处
最近新down了一个源码,写的非常“精彩”,我之前的想法 他都用代码复现了,idea被复现 悔我不会写代码。。。但是想到一个新模型想在他的基础上训练看看结果,于是就掉入了 keras的坑。 下面一起来看看如何冻结前面的已训练好的层,只训练后面的模型吧。
看到 有方法说
- 通过trainable(布尔值)对特定层进行构造,使某一层不可被训练:
frozen_layer = Dense(32, trainable=False)
那是否是 把不需要训练的层都加上 trainable=False ,直接load 进之前的model权重 就可以训练我新加的层了??(好像想得太简单 caffe 是这样。。)
看官网
1 load进VGG16的卷积权重
2 添加我们先前定义的完全连接模型,并加载其权重 (这里很奇怪 自己新定义的层 没有权重咋办)
3 冻结VGG16模型的层到最后一个卷积块
注:1 为了执行微调,所有层都应该以经过适当训练的权重开始:例如,您不应该将随机初始化的完全连接网络置于经过预先训练的卷积基之上。这是因为由随机初始化的权重触发的大梯度更新将破坏卷积基中的学习权重。在我们的例子中,这就是为什么我们首先训练顶级分类器,然后才开始微调卷积权重。(貌似很麻烦的样子)
2 为了防止过拟合,我们选择只对最后一个卷积块进行微调,而不是对整个网络进行微