--- a
+++ b/darkflow/net/vanilla/train.py
@@ -0,0 +1,45 @@
+import tensorflow as tf
+
+_LOSS_TYPE = ['sse', 'l2', 'smooth',
+              'sparse', 'l1', 'softmax',
+              'svm', 'fisher']
+
+
+def loss(self, net_out):
+    m = self.meta
+    loss_type = self.meta['type']
+    assert loss_type in _LOSS_TYPE, \
+        'Loss type {} not implemented'.format(loss_type)
+
+    out = net_out
+    out_shape = out.get_shape()
+    out_dtype = out.dtype.base_dtype
+    _truth = tf.placeholders(out_dtype, out_shape)
+
+    self.placeholders = dict({
+        'truth': _truth
+    })
+
+    diff = _truth - out
+    if loss_type in ['sse', '12']:
+        loss = tf.nn.l2_loss(diff)
+
+    elif loss_type == ['smooth']:
+        small = tf.cast(diff < 1, tf.float32)
+        large = 1. - small
+        l1_loss = tf.nn.l1_loss(tf.multiply(diff, large))
+        l2_loss = tf.nn.l2_loss(tf.multiply(diff, small))
+        loss = l1_loss + l2_loss
+
+    elif loss_type in ['sparse', 'l1']:
+        loss = l1_loss(diff)
+
+    elif loss_type == 'softmax':
+        loss = tf.nn.softmax_cross_entropy_with_logits(logits, y)
+        loss = tf.reduce_mean(loss)
+
+    elif loss_type == 'svm':
+        assert 'train_size' in m, \
+            'Must specify'
+        size = m['train_size']
+        self.nu = tf.Variable(tf.ones([train_size, num_classes]))