I follow the Nicholas Renotte tutorial "Build a Deep Facial Recognition App"(Python). But at the part 4 I faced a problem, here is the code:
Siamese L1 Distance class
class L1Dist(Layer):
# Init method - inheritance
def __init__(self, **kwargs):
super().__init__()
# Magic happens here - similarity calculation
def call(self, input_embedding, validation_embedding):
return tf.math.abs(input_embedding - validation_embedding)
TypeError: unsupported operand type(s) for -: 'list' and 'list'
In the video all is fine, but in my case function can't do the substraction (input_embedding - validation_embedding)
Arguments received by L1Dist.call():
args=(['<KerasTensor shape=(None, 4096), dtype=float32, sparse=False, name=keras_tensor_18>'], ['<KerasTensor shape=(None, 4096), dtype=float32, sparse=False, name=keras_tensor_19>'])
Tried to modify:
def call(self, input_embedding, validation_embedding):
input_embedding = tf.convert_to_tensor(input_embedding)
validation_embedding = tf.convert_to_tensor(validation_embedding)
input_embedding = tf.squeeze(input_embedding, axis=0) # Remove potential first dimension
validation_embedding = tf.squeeze(validation_embedding, axis=0)
return tf.math.abs(input_embedding - validation_embedding)
But failed
line 108, in convert_to_eager_tensor
return ops.EagerTensor(value, ctx.device_name, dtype)
ValueError: TypeError: object of type 'KerasTensor' has no len()
Tried tf.keras.layers.Subtract()([input_embedding, validation_embedding]) But AttributeError: Exception encountered when calling Subtract.call().
'list' object has no attribute 'shape'
With keras.ops.subtract(input_embedding, validation_embedding) faced: ValueError(f"Invalid dtype: {dtype}") ValueError: Invalid dtype: list