# UNQ_C1(UNIQUE CELL IDENTIFIER, DO NOT EDIT)# GRADED FUNCTION: triplet_lossdeftriplet_loss(y_true, y_pred, alpha =0.2):"""
Implementation of the triplet loss as defined by formula (3)
Arguments:
y_true -- true labels, required when you define a loss in Keras, you don't need it in this function.
y_pred -- python list containing three objects:
anchor -- the encodings for the anchor images, of shape (None, 128)
positive -- the encodings for the positive images, of shape (None, 128)
negative -- the encodings for the negative images, of shape (None, 128)
Returns:
loss -- real number, value of the loss
"""
anchor, positive, negative = y_pred[0], y_pred[1], y_pred[2]### START CODE HERE#(≈ 4 lines)# Step 1: Compute the (encoding) distance between the anchor and the positive
pos_dist = tf.reduce_sum(tf.square(tf.subtract(anchor,positive)),axis=-1)# Step 2: Compute the (encoding) distance between the anchor and the negative
neg_dist =tf.reduce_sum(tf.square(tf.subtract(anchor,negative)),axis=-1)# Step 3: subtract the two previous distances and add alpha.
basic_loss = pos_dist-neg_dist+alpha
# Step 4: Take the maximum of basic_loss and 0.0. Sum over the training examples.
loss = tf.reduce_sum(tf.maximum(basic_loss,0.0))### END CODE HEREreturn loss
# UNQ_C2(UNIQUE CELL IDENTIFIER, DO NOT EDIT)# GRADED FUNCTION: verifydefverify(image_path, identity, database, model):"""
Function that verifies if the person on the "image_path" image is "identity".
Arguments:
image_path -- path to an image
identity -- string, name of the person you'd like to verify the identity. Has to be an employee who works in the office.
database -- python dictionary mapping names of allowed people's names (strings) to their encodings (vectors).
model -- your Inception model instance in Keras
Returns:
dist -- distance between the image_path and the image of "identity" in the database.
door_open -- True, if the door should open. False otherwise.
"""### START CODE HERE# Step 1: Compute the encoding for the image. Use img_to_encoding() see example above. (≈ 1 line)
encoding = img_to_encoding(image_path, model)# Step 2: Compute distance with identity's image (≈ 1 line)
dist = np.linalg.norm((encoding-database[identity]))# Step 3: Open the door if dist < 0.7, else don't open (≈ 3 lines)if dist <0.7:print("It's "+str(identity)+", welcome in!")
door_open =Trueelse:print("It's not "+str(identity)+", please go away")
door_open =False### END CODE HERE return dist, door_open
# UNQ_C3(UNIQUE CELL IDENTIFIER, DO NOT EDIT)# GRADED FUNCTION: who_is_itdefwho_is_it(image_path, database, model):"""
Implements face recognition for the office by finding who is the person on the image_path image.
Arguments:
image_path -- path to an image
database -- database containing image encodings along with the name of the person on the image
model -- your Inception model instance in Keras
Returns:
min_dist -- the minimum distance between image_path encoding and the encodings from the database
identity -- string, the name prediction for the person on image_path
"""### START CODE HERE## Step 1: Compute the target "encoding" for the image. Use img_to_encoding() see example above. ## (≈ 1 line)
encoding = img_to_encoding(image_path, model)## Step 2: Find the closest encoding ### Initialize "min_dist" to a large value, say 100 (≈1 line)
min_dist =100# Loop over the database dictionary's names and encodings.for(name, db_enc)in database.items():# Compute L2 distance between the target "encoding" and the current db_enc from the database. (≈ 1 line)
dist = np.linalg.norm((encoding-db_enc))# If this distance is less than the min_dist, then set min_dist to dist, and identity to name. (≈ 3 lines)if dist < min_dist:
min_dist = dist
identity = name
### END CODE HEREif min_dist >0.7:print("Not in the database.")else:print("it's "+str(identity)+", the distance is "+str(min_dist))return min_dist, identity