Я создаю пользовательский слой 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). Рассмотрим приведение элементов к поддерживаемому типу.