Добавление тензора параметра той же формы, что и входного тензора, в пользовательский слой - PullRequest
0 голосов
/ 17 мая 2019

Я создаю пользовательский слой Keras, в котором я пытаюсь добавить обучаемый вектор параметров той же формы, что и входной тензор в слой. Однако я не могу понять, как это сделать без ошибки преобразования типов.

Я пытался использовать аргумент слоя input_shape в качестве формы тензора параметра.

Вот как выглядит мой слой:

from keras import backend as K
from keras.layers import Layer

class MyEstLayer(Layer):

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

    def build(self, input_shape):
        # Create a trainable weight variable for this layer.
        self.zeros = self.add_weight(name='zeros', 
                                      shape=(input_shape[1], self.output_dim),
                                      initializer='Zeros',
                                      trainable=False)
        self.output_estimate = self.add_weight(name='output_estimate',
                                     shape=(self.output_dim,),
                                     initializer='uniform',
                                     trainable=True)
        self.input_estimate = self.input_estimate = self.add_weight(name='input_estimate',
                                     shape = input_shape,
                                     initializer='uniform',
                                     trainable=True)
        super(MyEstLayer, self).build(input_shape)  # Be sure to call this at the end

    def call(self, x):
        return keras.activations.relu(K.bias_add(K.dot(self.input_estimate, self.zeros), self.output_estimate))
    def compute_output_shape(self, input_shape):
        return (input_shape[0], self.output_dim)

Вот как выглядит моя модель

input_tensor = layers.Input(shape=(784,))
input_mid = layers.Input(shape=(10,))
layer1est = MyEstLayer(10,)(input_tensor)
layer2est = MyEstLayer(10,)(input_mid)
outputest = MyEstOutput(10,)(input_mid)

Это ошибка, которую я получаю при попытке запустить выше:

TypeError: Не удалось преобразовать объект типа в Tensor. Содержание: (Нет, 784). Рассмотрим приведение элементов к поддерживаемому типу.

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