title: Caffe SigmoidCrossEntropyLoss Layer Multilabel classification c++
body: <p>I have a network that gets 2 input images, and these two images belong to more than one class out of 9 classes. All the examples I've seen - in Caffe docs - load input image directly from prototxt, however I feed in the information through my c++ code.</p>
  
  <p>My input layer looks as follows</p>
  
  <pre><code>input: "data"
  input_shape{dim:20 dim:6 dim:100 dim:100}
  
  input: "class_label"
  input_shape{dim:20 dim:9}
  </code></pre>
  
  <p>The loss layer looks as follows</p>
  
  <pre><code>layer {
    name: "classes"
    type: "InnerProduct"
    bottom: "ip2"
    top: "classes"
    param { lr_mult: 1 }
    param { lr_mult: 2 }
    inner_product_param {
      num_output: 9
      weight_filler {  type: "xavier" }
      bias_filler { type: "constant" }
    }
  }
  
  
  layer {
    name: "class_loss"
    type: "SigmoidCrossEntropyLoss"
    bottom: "classes"
    bottom: "class_label"
    top: "class_loss"
  }
  </code></pre>
  
  <p>My assumption is that the input should be a stream looking like this 
  [0 0 1 0 1 0 1 0 0], where 1 signifies that the images belong to the class and 0 means that it doesn't, is this true?</p>
  
  <p>My second question is, what should I expect from the output of SigmoidCrossEntropyLoss layer (e.g SoftmaxWithLoss outputs probabilities)?</p>