如何在Keras中使用自定义Theano图层?

时间:2017-10-30 15:04:02

标签: tensorflow keras theano

我在Theano中定义了自定义图层。我想在我的Keras模型中使用它们。我怎样才能做到这一点? Theano中的这些图层(定义为类)是否必须遵循某种格式?

我无法找到任何资源。如果有人可以指导我,那将非常有帮助。

1 个答案:

答案 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()