Я хочу взять квадрат разницы между тензорами / выводом после слоя LSTM и умножить его на обучаемый параметр.
Как указал @rvinas, я попытался написать свой собственный слой дляцель,
class MyLayer(Layer):
def __init__(self,W_regularizer=None,W_constraint=None, **kwargs):
self.init = initializers.get('glorot_uniform')
self.W_regularizer = regularizers.get(W_regularizer)
self.W_constraint = constraints.get(W_constraint)
super(MyLayer, self).__init__(**kwargs)
def build(self, input_shape):
assert len(input_shape) == 3
# Create a trainable weight variable for this layer.
self.W = self.add_weight((input_shape[-1],),
initializer=self.init,
name='{}_W'.format(self.name),
regularizer=self.W_regularizer,
constraint=self.W_constraint,
trainable=True)
super(MyLayer, self).build(input_shape)
Функция вызова умножает только те тензоры и вес, которые я инициализировал.Тем не менее мне нужно найти, как взять попарную разницу и возвести ее в квадрат.
def call(self, x):
uit = K.dot(x, self.W)
return uit
def compute_output_shape(self, input_shape):
return input_shape[0], input_shape[-1]
Но тогда я получаю AssertionError
при assert len(input_shape) >= 3
.
Я хочу выполнить:
from keras.layers import Input, Lambda, LSTM
from keras.models import Model
import keras.backend as K
from keras.layers import Lambda
lstm=LSTM(128, return_sequences=True)(input)
something=MyLayer()(lstm)