Hi!

While doing this assignment, all exercises pass the tests. However, when trying to create the model, which is a given line in the lab, there is an error.

This is the line provided by the lab to define the model:

model = util.unet_model_3d(loss_function=soft_dice_loss, metrics=[dice_coefficient])

All the functions before this line are working perfectly. However, while defining the model, the soft-dice-loss seems to be throwing an error, even though the function passed the test.

This is the log I am getting:

NotImplementedError Traceback (most recent call last)

in ()

----> 1 model = util.unet_model_3d(loss_function=soft_dice_loss, metrics=[dice_coefficient])

~/work/W3A1/util.py in unet_model_3d(loss_function, input_shape, pool_size, n_labels, initial_learning_rate, deconvolution, depth, n_base_filters, include_label_wise_dice_coefficients, metrics, batch_normalization, activation_name)

190

191 model.compile(optimizer=Adam(lr=initial_learning_rate), loss=loss_function,

→ 192 metrics=metrics)

193 return model

194

/opt/conda/lib/python3.6/site-packages/keras/engine/training.py in compile(self, optimizer, loss, metrics, loss_weights, sample_weight_mode, weighted_metrics, target_tensors, **kwargs)

227 # loss_weight_2 * output_2_loss_fn(…) +

228 # layer losses.

→ 229 self.total_loss = self._prepare_total_loss(masks)

230

231 # Functions for train, test and predict will

/opt/conda/lib/python3.6/site-packages/keras/engine/training.py in _prepare_total_loss(self, masks)

690

691 output_loss = loss_fn(

→ 692 y_true, y_pred, sample_weight=sample_weight)

693

694 if len(self.outputs) > 1:

/opt/conda/lib/python3.6/site-packages/keras/losses.py in **call**(self, y_true, y_pred, sample_weight)

69 scope_name = ‘lambda’ if self.name == ‘’ else self.name

70 with K.name_scope(scope_name):

—> 71 losses = self.call(y_true, y_pred)

72 return losses_utils.compute_weighted_loss(

73 losses, sample_weight, reduction=self.reduction)

/opt/conda/lib/python3.6/site-packages/keras/losses.py in call(self, y_true, y_pred)

130 Loss values per sample.

131 “”"

→ 132 return self.fn(y_true, y_pred, **self._fn_kwargs)

133

134 def get_config(self):

in soft_dice_loss(y_true, y_pred, axis, epsilon)

22

23 dice_numerator = 2* K.sum((y_true*y_pred),axis=axis) + epsilon

—> 24 dice_denominator = K.sum(np.square(y_true),axis=axis) + K.sum(np.square(y_pred),axis=axis) + epsilon

25 dice_loss = 1 - (K.mean(dice_numerator/dice_denominator))

26

/opt/conda/lib/python3.6/site-packages/tensorflow_core/python/framework/ops.py in **array**(self)

734 def **array**(self):

735 raise NotImplementedError(“Cannot convert a symbolic Tensor ({}) to a numpy”

→ 736 " array.".format(self.name))

737

738 def **len**(self):

NotImplementedError: Cannot convert a symbolic Tensor (activation_15_target:0) to a numpy array.

Any clue?

Thank you!

Juan