Как реализовать некоторые обучаемые параметры в модели Keras, такие как nn.Parameters () в Pytorch? - PullRequest
0 голосов
/ 21 октября 2019

Я просто хочу реализовать некоторые обучаемые параметры в моей модели с Keras. В Pytorch мы можем сделать это, используя torch.nn.Parameter (), как показано ниже:

self.a = nn.Parameter(torch.ones(8))
self.b = nn.Parameter(torch.zeros(16,8))

Я думаю, что, делая это в pytorch, он может добавить некоторые обучаемые параметры в модель. И теперь я хочу знать, как выполнять подобные операции в керасе? Любые предложения или советы приветствуются!

THX! :)

ps Я просто пишу пользовательский слой в Keras, как показано ниже:

class Mylayer(Layer):

    def __init__(self,input_dim,output_dim,**kwargs):
        self.input_dim = input_dim
        self.output_dim = output_dim
        super(Mylayer,self).__init__(**kwargs)

    def build(self):

        self.kernel = self.add_weight(name='pi',
                                      shape=(self.input_dim,self.output_dim),
                                      initializer='zeros',
                                      trainable=True)
        self.kernel_2 = self.add_weight(name='mean',
                                        shape=(self.input_dim,self.output_dim),
                                        initializer='ones',
                                        trainable=True)

        super(Mylayer,self).build()

    def call(self,x):
        return x,self.kernel,self.kernel_2

, и я хочу знать, не изменил ли я тензор, проходящий через слой, если янапишите функцию def compute_output_shape() для нужного?

1 Ответ

0 голосов
/ 21 октября 2019

Вам необходимо создать обучаемые веса в пользовательском слое:

class MyLayer(Layer):
    def __init__(self, my_args, **kwargs):
        #do whatever you need with my_args

        super(MyLayer, self).__init__(**kwargs) 

    #you create the weights in build:
    def build(self, input_shape):
        #use the input_shape to infer the necessary shapes for weights
        #use self.whatever_you_registered_in_init to help you, like units, etc. 

        self.kernel = self.add_weight(name='kernel', 
                                  shape=the_shape_you_calculated,
                                  initializer='uniform',
                                  trainable=True)

        #create as many weights as necessary for this layer

        #build the layer - equivalent to self.built=True
        super(MyLayer, self).build(input_shape)

    #create the layer operation here
    def call(self, inputs):
        #do whatever operations are needed
        #example:
        return inputs * self.kernel #make sure the shapes are compatible

    #tell keras about the output shape of your layer
    def compute_output_shape(self, input_shape):
        #calculate the output shape based on the input shape and your layer's rules
        return calculated_output_shape

Теперь используйте ваш слой в модели.


Если вы используете активное выполнение с tenorflowи создавая пользовательский цикл обучения, вы можете работать почти так же, как с PyTorch, и вы можете создавать веса вне слоев с помощью tf.Variable, передавая их в качестве параметров в методы вычисления градиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...