I have been stuck in unet_model function. I have already read all the related topics but could not find an answer. Would really appreciate if I get some help.

conv_block and unsampling block have already passed the tests and this is how I write the unet_model.

cblock1 is the output of conv_block for inputs and n_filters, and up to cblock5 I feed cblock(previous)[0] and double the n_filter to conv_block. ublock6 is also done as explained. Rest of the ublocks are obtained using ublock(previous) and cblock(corresponding)[1] and half of the n-filters. ex: ublock7 = upsampling_block(ublock6, cblock3[1], n_filters * 4)

I get this error on ublock6:

Could you help me figure out where I’m going wrong?

Did you set the maxpooling for cblock5 as hinted in code comments?

1 Like

yes, dropout_prob=0.3, max_pooling=‘False’ for cblock5 and dropout_prob=0.3 for cblock4.


Could you help me here please. I have been trying to solve it since yesterday and stuck on this assignment. @paulinpaloalto

Hey, just solved it. :slight_smile:

1 Like

It’s great to hear that you found the solution under your own power! Thanks for confirming.

I am getting the same error…but I am not able understand it… help please!

Please show us the actual output you are getting: not just the error message, the complete exception trace.

Ok, that does look like the same error. The solution was hinted at earlier on this thread. Your code for ublock6 looks correct, but one of the inputs is the wrong shape. Notice that the first one has h and w dimensions half of the second one. Did you perhaps miss the point that cblock5 is different than all the other contracting blocks in that you were not supposed to apply max pooling? The instructions in the comments in the template code were pretty clear on that point.

I have mentioned cblock5 = conv_block(cblock4[0], n_filters*16, dropout_prob=0.3, max_pooling=‘False’)

That is the wrong syntax for specifying the max_pooling value: it is a Boolean, but you’ve given it a python String value. Since the value is not zero, it ends up being the equivalent of True when you coerce it to a Boolean.

1 Like

ohhh…Gotcha… Thanks!!!

Thank you so much, it seems silly but I was stuck on the same problem for a long time too.

Hi Naeimeh.A, I followed carefully the instructions and still get the following:ValueError Traceback (most recent call last)
4 num_channels = 3
----> 6 unet = unet_model((img_height, img_width, num_channels))
7 comparator(summary(unet), outputs.unet_model_output)

in unet_model(input_size, n_filters, n_classes)
19 # Chain the first element of the output of each block to be the input of the next conv_block.
20 # Double the number of filters at each new step
—> 21 cblock2 = conv_block(cblock1, n_filters2)
22 cblock3 = conv_block(cblock2, n_filters
23 cblock4 = conv_block(cblock3, n_filters*8, dropout=0.3) # Include a dropout_prob of 0.3 for this layer

in conv_block(inputs, n_filters, dropout_prob, max_pooling)
19 activation=‘relu’,
20 padding=‘same’,
—> 21 kernel_initializer=‘he_normal’)(inputs)
22 conv = Conv2D(n_filters, # Number of filters
23 3, # Kernel size

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/ in call(self, *args, **kwargs)
924 if _in_functional_construction_mode(self, inputs, args, kwargs, input_list):
925 return self._functional_construction_call(inputs, args, kwargs,
→ 926 input_list)
928 # Maintains info about the stack.

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/ in _functional_construction_call(self, inputs, args, kwargs, input_list)
1090 # TODO(reedwm): We should assert input compatibility after the inputs
1091 # are casted, not before.
→ 1092 input_spec.assert_input_compatibility(self.input_spec, inputs,
1093 graph = backend.get_graph()
1094 # Use self._name_scope() to avoid auto-incrementing the name.

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/ in assert_input_compatibility(input_spec, inputs, layer_name)
156 str(len(input_spec)) + ’ inputs, ’
157 'but it received ’ + str(len(inputs)) +
→ 158 ’ input tensors. Inputs received: ’ + str(inputs))
159 for input_index, (x, spec) in enumerate(zip(inputs, input_spec)):
160 if spec is None:

ValueError: Layer conv2d_43 expects 1 inputs, but it received 2 input tensors. Inputs received: [<tf.Tensor ‘max_pooling2d_13/MaxPool:0’ shape=(None, 48, 64, 32) dtype=float32>, <tf.Tensor ‘conv2d_42/Relu:0’ shape=(None, 96, 128, 32) dtype=float32>]

Maybe you can direct me to my fault? thanks

1 Like