是否可以保存经过训练的图层以在 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
。
我还有另一个模型要训练,它由 layer1
、layer2
、layer3
组成。
我想将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 上使用图层?的主要内容,如果未能解决你的问题,请参考以下文章