是否可以保存经过训练的图层以在 Keras 上使用图层?

Posted

技术标签:

【中文标题】是否可以保存经过训练的图层以在 Keras 上使用图层?【英文标题】:Is it possible to save a trained layer to use layer on Keras? 【发布时间】:2017-11-22 12:14:48 【问题描述】:

我没用过Keras,正在考虑要不要用。

我想保存一个经过训练的图层以供以后使用。例如:

    我训练一个模型。 然后,我获得了一个经过训练的层 t_layer。 我还有另一个模型要训练,它由 layer1layer2layer3 组成。 我想将t_layer 用作layer2,而不是更新此层(即t_layer 不再学习)。

这可能是一个奇怪的尝试,但我想试试这个。这在 Keras 上可行吗?

【问题讨论】:

【参考方案1】:

是的,是的。

您可能必须保存图层的权重和偏差,而不是保存图层本身,但这是可能的。

Keras 还允许您save entire models。

假设你在 var model 中有一个模型:

weightsAndBiases = model.layers[i].get_weights()

这是一个 numpy 数组列表,很可能有两个数组:权重和偏差。您可以简单地使用numpy.save() 来保存这两个数组,然后您可以创建一个类似的层并为其赋予权重:

from keras.layers import *
from keras.models import Model

inp = Input(....)    
out1 = SomeKerasLayer(...)(inp)  
out2 = AnotherKerasLayer(....)(out1)
.... 
model = Model(inp,out2)
#above is the usual process of creating a model    

#supposing layer 2 is the layer you want (you can also use names)    

weights = numpy.load(...path to your saved weights)    
biases = numpy.load(... path to your saved biases)
model.layers[2].set_weights([weights,biases])

您可以使层不可训练(必须在模型编译之前完成):

model.layers[2].trainable = False    

然后你编译模型:

model.compile(.....)    

然后就是这样,一个模型,它的一层是不可训练的,并且有你定义的权重和偏差,取自其他地方。

【讨论】:

以上是关于是否可以保存经过训练的图层以在 Keras 上使用图层?的主要内容,如果未能解决你的问题,请参考以下文章

使用Keras深度学习进行图层计数

arcgis图层 GraphicsLayer与FeatureLayer

如何将 l2 归一化应用于 keras 中的图层?

将keras权重加载到特定图层

是否可以重新训练以前保存的 keras 模型?

从经过训练的 keras 模型中获取训练超参数