Как построить пользовательский слой с обучаемыми параметрами и точно получить вывод тензора параметров в Керасе? - PullRequest
0 голосов
/ 28 октября 2019

Я хочу написать собственный слой с обучаемым параметром внутри него. На самом деле, я просто хочу добавить эту обучаемую модель в мою модель, и мне не нужен этот слой, чтобы что-то делать. Мой код подобен приведенному ниже:

from time import time
import numpy as np
import random
from keras.models import Model
import keras.backend as K
from keras.engine.topology import Layer, InputSpec
from keras.layers import Dense, Input, GaussianNoise, Layer, Activation
from keras.models import Model
from keras.optimizers import SGD, Adam
from keras.utils.vis_utils import plot_model
from keras.callbacks import EarlyStopping


class Mylayer(Layer):
    def __init__(self,output_dim):
        super(Mylayer,self).__init__()
        self.output_dim = output_dim

    def build(self,input_shape):
        self.kernel = self.add_weight(shape=(input_shape[-1],self.output_dim),
                                      initializer = 'random_uniform',
                                      trainable=True)
    def call(self,inputs):
        return [inputs,self.kernel]

    def compute_output_shape(self,input_shape):
        return [input_shape,(input_shape[-1],self.output_dim)]

Input_1 = Input((100,))

middle = Dense(50)(Input_1)
middle = Dense(25)(middle)
middle,kernel = Mylayer(10)(middle)
output = Dense(100)(middle)

model = Model(inputs=Input_1,outputs=output)

data = np.random.randn(25,100)

model.compile(optimizer='adam',
              loss='mse',
              metrics=['accuracy'])

model.fit(data,
          data,
          batch_size=32,
          epochs=5,
          verbose=1)

, и модель может быть скомпилирована, но когда она запускается,model.fit Исходя, возникает ошибка:

An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.

Ну, я думаю, возможно, проблема возникает в возвращении trainable_parameters self.kernel, так как я должен получить пользовательскийобучаемый параметр в керасе? Другими словами, есть ли какой-нибудь метод для создания обучаемых параметров в Керасе? Я думаю, что использование tf.Variable() создаст хаос в модели Keras. Спасибо!

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