Я пытаюсь создать пользовательский слой keras для выполнения определенной задачи
У меня есть ввод shape = (batch_size, M, N, p) Я хочу, чтобы мой вывод имел форму = (batch_size,M, N, f)
Итак, я установил обучаемый составной фигуры = (M, N, p, f)
Ниже мой код
class convLayer(Layer):
"""
Self defined convolutional layer
"""
def __init__(self, filter_no, **kwargs):
self.filter_no = filter_no
super(convLayer, self).__init__(**kwargs)
def build(self, input_shape):
self.conv_weights = self.add_weight(name='weight',
shape=(input_shape[1], input_shape[2],
input_shape[3], self.filter_no),
initializer='uniform',
trainable=True)
super(convLayer, self).build(input_shape)
def call(self, inputs):
outputs = K.placeholder(shape=(inputs.shape[0], inputs.shape[1],
inputs.shape[2], self.filter_no),
dtype=tf.float32)
for i in range(self.filter_no):
weight = self.conv_weights[:,:,:, i]
val = tf.math.multiply(inputs, weight)
for j in range(val.shape[3]):
if i==0:
outputs[:,:,:,i].assign(val[:,:,:,j])
else:
outputs[:,:,:,i].assign(tf.math.add(outputs[:,:,:,i], val[:,:,:,j]))
return outputs
def compute_output_shape(self, input_shape):
return (input_shape[0], input_shape[1], input_shape[2], self.filter_no)
Мой вывод должен иметь форму = (batch_size, M, N, f) для каждого f, все элементы оси p в обоих входных и conv_weight должны быть умножены и суммированы вместе.
Я пытался и получаюнесколько ошибок.Я относительно новичок в создании пользовательских слоев.Пожалуйста, помогите.Спасибо.
Сообщение об ошибке: Назначение нарезки поддерживается только для переменных.