   out.GetTopsDims({h1_dims}, {out_dims});
   size_t softmax_out_dims[4];
   softmax_layer.GetTopsDims({out_dims}, {softmax_out_dims});
+  size_t ce_out_dims[4];
+  cel_layer.GetTopsDims({out_dims}, {ce_out_dims});
+
 
   Tensor<float>* in_tensor = Tensor<float>::CreateTensorGPU(in_dims);
   Tensor<float>* in_tensor_diff = Tensor<float>::CreateTensorGPU(in_dims);

  FC<float> h1(in_nodes, h1_nodes, &const_init);
  FC<float> out(h1_nodes, out_nodes, &const_init);
  Softmax<float> softmax_layer;

  size_t in_dims[4] = {batch_size, 1, 1, in_nodes};
  size_t h1_dims[4];

  Tensor<float>* softmax_out_tensor = Tensor<float>::CreateTensorGPU(softmax_out_dims);
  Tensor<float>* softmax_out_tensor_diff = Tensor<float>::CreateTensorGPU(softmax_out_dims);

  Tensor<float>* cel_out_tensor = Tensor<float>::CreateTensorGPU(ce_out_dims);
  Tensor<float>* cel_out_tensor_diff = Tensor<float>::CreateTensorGPU(ce_out_dims);

  Tensor<float>* y_out = Tensor<float>::CreateTensorGPU(out_dims);

  std::vector<std::vector<float>> x_train = {{0,1},{0,0},{1,0},{1,1}};
