Week 4 - Image segmentation - Exercise 3 - unet_model

Hello, I’m trying to run the unit_model and my code isn’t pass through the test, someone can help me? This is my code:
def unet_model(input_size=(96, 128, 3), n_filters=32, n_classes=23):
“”"
Unet model

Arguments:
    input_size -- Input shape 
    n_filters -- Number of filters for the convolutional layers
    n_classes -- Number of output classes
Returns: 
    model -- tf.keras.Model
"""
inputs = Input(input_size)
# Contracting Path (encoding)
# Add a conv_block with the inputs of the unet_ model and n_filters
### START CODE HERE
cblock1 = conv_block(inputs, n_filters)
# Chain the first element of the output of each block to be the input of the next conv_block. 
# Double the number of filters at each new step
cblock2 = conv_block(cblock1[0], 2*n_filters)
cblock3 = conv_block(cblock2[0], 4*n_filters)
cblock4 = conv_block(cblock3[0], 8*n_filters, dropout_prob=0.3) # Include a dropout of 0.3for this layer
# Include a dropout of 0.3 for this layer, and avoid the max_pooling layer
cblock5 = conv_block(cblock4[0], n_filters*16, dropout_prob=0.3, max_pooling=False) 
### END CODE HERE

# Expanding Path (decoding)
# Add the first upsampling_block.
# Use the cblock5[0] as expansive_input and cblock4[1] as contractive_input and n_filters * 8
### START CODE HERE
ublock6 = upsampling_block(cblock5[0], cblock4[1],  n_filters*8)
# Chain the output of the previous block as expansive_input and the corresponding contractive block output.
# Note that you must use the second element of the contractive block i.e before the maxpooling layer. 
# At each step, use half the number of filters of the previous block 
ublock7 = upsampling_block(ublock6, cblock3[1],  n_filters*4)
ublock8 = upsampling_block(ublock7, cblock2[1],  n_filters*2)
ublock9 = upsampling_block(ublock8, cblock1[1],  n_filters*1)
### END CODE HERE

conv9 = Conv2D(n_filters,
             3,
             activation='relu',
             padding='same',
             kernel_initializer='he_normal')(ublock9)

# Add a Conv2D layer with n_classes filter, kernel size of 1 and a 'same' padding
### START CODE HERE
conv10 = Conv2D(n_filters, 1, padding='same')(conv9)
### END CODE HERE

model = tf.keras.Model(inputs=inputs, outputs=conv10)

return model

And this is the error:
Test failed
Expected value

[‘Conv2D’, (None, 96, 128, 23), 759, ‘same’, ‘linear’, ‘GlorotUniform’]

does not match the input value:

[‘Conv2D’, (None, 96, 128, 32), 1056, ‘same’, ‘linear’, ‘GlorotUniform’]

AssertionError Traceback (most recent call last)
in
5
6 unet = unet_model((img_height, img_width, num_channels))
----> 7 comparator(summary(unet), outputs.unet_model_output)

/tf/W3A2/test_utils.py in comparator(learner, instructor)
17 “\n\n does not match the input value: \n\n”,
18 colored(f"{a}", “red”))
—> 19 raise AssertionError(“Error in test”)
20 print(colored(“All tests passed!”, “green”))
21

AssertionError: Error in test

I made the same mistake as you the first time I wrote it. Later I found that I made a mistake in the last step :conv10 = Conv2D(n_classes, 1, padding=‘same’)(conv9)

1 Like

thank you! now works fine!