 
     h1.Forward({in_tensor}, {h1_tensor});
     out.Forward({h1_tensor}, {out_tensor});
+    softmax_layer.Forward({out_tensor}, {softmax_out_tensor});
 
     for(int b = 0; b < batch_size; b++) {
       for(int i = 0; i < out_nodes; i++) {

  ConstInitializer<float> const_init(2.0, 1.0);
  FC<float> h1(in_nodes, h1_nodes, &const_init);
  FC<float> out(h1_nodes, out_nodes, &const_init);

  size_t in_dims[4] = {batch_size, 1, 1, in_nodes};
  size_t h1_dims[4];
  h1.GetTopsDims({in_dims}, {h1_dims});
  size_t out_dims[4];
  out.GetTopsDims({h1_dims}, {out_dims});


  Tensor<float>* in_tensor = Tensor<float>::CreateTensorCPU(in_dims);
  Tensor<float>* in_tensor_diff = Tensor<float>::CreateTensorCPU(in_dims);

    h1.Backward({h1_tensor}, {h1_tensor_diff}, {in_tensor}, {in_tensor_diff});

    printf("out activations\n");
    show_fc_tensor_cpu(softmax_out_tensor);

    /*  
    printf("h1 activations\n");
