我在Theano中定义了自定义图层。我想在我的Keras模型中使用它们。我怎样才能做到这一点? Theano中的这些图层(定义为类)是否必须遵循某种格式?
我无法找到任何资源。如果有人可以指导我,那将非常有帮助。
答案 0 :(得分:1)
纯粹的操作:
如果这些图层是纯操作,则可以使用keras Lambda图层。
我们的想法是创建一个带有一个张量(或张量列表)的函数,并在此函数中执行所有操作:
def customFunc(x):
#tensor operations with the input tensor x
#you can use either keras.backend functions or theano functions
#paste the theano functions here
#you can also attempt to call the theano layer here, passing x as input
return result
然后从此函数创建Lambda图层:
model.add(Lambda(customFunc, output_shape=someShape))
具有可训练重量的图层
如果图层具有可训练的权重,则必须创建keras custom layer。
这是一个用build
方法定义权重并使用call
方法执行操作的类:
class MyLayer(Layer):
def __init__(self, yourOwnParameters, **kwargs):
self.yourOwnParameters = yourOwnParameters
super(MyLayer, self).__init__(**kwargs)
def build(self, input_shape):
# Create a trainable weight variable for this layer.
self.kernel = self.add_weight(name='kernel',
shape=someKernelShape,
initializer='uniform',
trainable=True)
#because of self.add_weight call:
#I'm not sure if you can use the theano layer unchanged
super(MyLayer, self).build(input_shape) # Be sure to call this somewhere!
def call(self, x):
#paste the theano operations here
return resultFromOperationsWith(x)
def compute_output_shape(self, input_shape):
return calculateSomeOutputShapeFromTheInputShape()