Rik*_*rta 4 python neural-network theano conv-neural-network keras
我有一个相当"简单"的问题.当我使用功能API创建网络时:
layer2 = Dense(8, name="layer2")(layer1)
Run Code Online (Sandbox Code Playgroud)
然后用它初始化它
model = Model(input=..., output=...)
Run Code Online (Sandbox Code Playgroud)
如果我想事后更换图层怎么办?如果我.pop()然后.append()是一个新图层,则没有任何变化 - 输出保持不变.我认为这是因为输出仍然是事先定义的.
我遇到的确切问题是:我加载了预先训练好的AlexNet及其权重,但是我想重新训练最后Dense一层用于8级而不是1000级的分类任务.为此,我想删除最后一层并重新开始 - 加上他们.
我找到了一个解决方法(在Keras中更改预先训练的AlexNet分类),但我认为应该有一种更简单的方法.另外,我不认为我的解决方法适用于GoogLeNet,所以我真的很想知道(或提示)如何处理这种情况.
该Model对象未持有的权重,这些层.您可以使用加载模型的权重model.load_weights(),然后根据您拥有的图层创建新图层,而不会丢失图层的初始化.
例如:
model.load_weights(f)
newClassificationLayer = Dense(8, activation='softmax')(lastCnnLayer)
model = Model(input=oldInput, output=newClassificationLayer)
Run Code Online (Sandbox Code Playgroud)
要确保所有其他图层都已冻结,并且除了新图层之外没有经过培训,您可以trainable=False为要冻结的每个图层设置.例如:
lastCnnLayer.trainable = False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1897 次 |
| 最近记录: |