Commit 5fdefa5a authored by peastman's avatar peastman
Browse files

Fixed errors in training models with uncertainty

parent f57af484
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -314,8 +314,19 @@ class MultitaskRegressor(KerasModel):
      output_types = ['prediction', 'variance', 'loss', 'loss']

      def loss(outputs, labels, weights):
        diff = labels[0] - outputs[0]
        return tf.reduce_mean(diff * diff / tf.exp(outputs[1]) + outputs[1])
        output, labels = dc.models.losses._make_tf_shapes_consistent(
            outputs[0], labels[0])
        output, labels = dc.models.losses._ensure_float(output, labels)
        losses = tf.square(output - labels) / tf.exp(outputs[1]) + outputs[1]
        w = weights[0]
        if len(w.shape) < len(losses.shape):
          if tf.is_tensor(w):
            shape = tuple(w.shape.as_list())
          else:
            shape = w.shape
          shape = tuple(-1 if x is None else x for x in shape)
          w = tf.reshape(w, shape + (1,) * (len(losses.shape) - len(w.shape)))
        return tf.reduce_mean(losses * w) + sum(self.model.losses)
    else:
      outputs = [output]
      output_types = ['prediction']
+39 −6
Original line number Diff line number Diff line
@@ -693,8 +693,19 @@ class DAGModel(KerasModel):
        output_types = ['prediction', 'variance', 'loss', 'loss']

        def loss(outputs, labels, weights):
          diff = labels[0] - outputs[0]
          return tf.reduce_mean(diff * diff / tf.exp(outputs[1]) + outputs[1])
          output, labels = dc.models.losses._make_tf_shapes_consistent(
              outputs[0], labels[0])
          output, labels = dc.models.losses._ensure_float(output, labels)
          losses = tf.square(output - labels) / tf.exp(outputs[1]) + outputs[1]
          w = weights[0]
          if len(w.shape) < len(losses.shape):
            if tf.is_tensor(w):
              shape = tuple(w.shape.as_list())
            else:
              shape = w.shape
            shape = tuple(-1 if x is None else x for x in shape)
            w = tf.reshape(w, shape + (1,) * (len(losses.shape) - len(w.shape)))
          return tf.reduce_mean(losses * w) + sum(self.model.losses)
      else:
        outputs = [output]
        output_types = ['prediction']
@@ -961,8 +972,19 @@ class GraphConvModel(KerasModel):
        output_types = ['prediction', 'variance', 'loss', 'loss', 'embedding']

        def loss(outputs, labels, weights):
          diff = labels[0] - outputs[0]
          return tf.reduce_mean(diff * diff / tf.exp(outputs[1]) + outputs[1])
          output, labels = dc.models.losses._make_tf_shapes_consistent(
              outputs[0], labels[0])
          output, labels = dc.models.losses._ensure_float(output, labels)
          losses = tf.square(output - labels) / tf.exp(outputs[1]) + outputs[1]
          w = weights[0]
          if len(w.shape) < len(losses.shape):
            if tf.is_tensor(w):
              shape = tuple(w.shape.as_list())
            else:
              shape = w.shape
            shape = tuple(-1 if x is None else x for x in shape)
            w = tf.reshape(w, shape + (1,) * (len(losses.shape) - len(w.shape)))
          return tf.reduce_mean(losses * w) + sum(self.model.losses)
      else:
        output_types = ['prediction', 'embedding']
        loss = L2Loss()
@@ -1102,8 +1124,19 @@ class MPNNModel(KerasModel):
        output_types = ['prediction', 'variance', 'loss', 'loss']

        def loss(outputs, labels, weights):
          diff = labels[0] - outputs[0]
          return tf.reduce_mean(diff * diff / tf.exp(outputs[1]) + outputs[1])
          output, labels = dc.models.losses._make_tf_shapes_consistent(
              outputs[0], labels[0])
          output, labels = dc.models.losses._ensure_float(output, labels)
          losses = tf.square(output - labels) / tf.exp(outputs[1]) + outputs[1]
          w = weights[0]
          if len(w.shape) < len(losses.shape):
            if tf.is_tensor(w):
              shape = tuple(w.shape.as_list())
            else:
              shape = w.shape
            shape = tuple(-1 if x is None else x for x in shape)
            w = tf.reshape(w, shape + (1,) * (len(losses.shape) - len(w.shape)))
          return tf.reduce_mean(losses * w) + sum(self.model.losses)
      else:
        outputs = [output]
        output_types = ['prediction']