diff --git a/sadl/layer_conv2d.h b/sadl/layer_conv2d.h
index 7013072b64e3d1f9765aca4ea98a6bc47e271061..f56c8c4d819eae580848ab92241b8d3fdc47e8e4 100644
--- a/sadl/layer_conv2d.h
+++ b/sadl/layer_conv2d.h
@@ -299,8 +299,16 @@ template<typename T> bool Conv2D<T>::init(const std::vector<Tensor<T> *> &in)
   const int k_w{ in[1]->dims()[1] };
   const int s_h   = m_strides[1];
   const int s_w   = m_strides[2];
-  const int out_H = (int)floor((float) (in_H + m_pads[0] + m_pads[2] - k_h) / s_h + 1);
-  const int out_W = (int)floor((float) (in_W + m_pads[1] + m_pads[3] - k_w) / s_w + 1);
+  // workaround heisenbug gcc 13
+  int out_H,out_W;
+  if (s_h == 1 )
+      out_H = (in_H + m_pads[0] + m_pads[2] - k_h) + 1;
+  else
+      out_H = (int)std::floor((float) (in_H + m_pads[0] + m_pads[2] - k_h) / s_h + 1);
+  if (s_w == 1 )
+      out_W = (in_W + m_pads[1] + m_pads[3] - k_w) / s_w + 1;
+  else
+      out_W = (int)std::floor((float) (in_W + m_pads[1] + m_pads[3] - k_w) / s_w + 1);
 
   // Hout=floor((H+2*p-k)/s+1)
   // assume p =k/2 (pad == same)
@@ -311,9 +319,9 @@ template<typename T> bool Conv2D<T>::init(const std::vector<Tensor<T> *> &in)
   dim[1] = out_H;
   dim[2] = out_W;
   dim[3] = in[1]->dims()[2];
-  if (out_H != dim[1] || out_W != dim[2]) {  // warning, fail with tf2 3x3s2 pad=same i=(5,4)
-    return false;
-  }
+//  if (out_H != dim[1] || out_W != dim[2]) {  // warning, fail with tf2 3x3s2 pad=same i=(5,4)
+//    return false;
+//  }
   if ((m_pads[0]!=m_pads[2])||(m_pads[1]!=m_pads[3])) {
        std::cerr << "[ERROR] assymetric padding note tested" << std::endl;
        return false;
@@ -323,7 +331,7 @@ template<typename T> bool Conv2D<T>::init(const std::vector<Tensor<T> *> &in)
        return false;
   }
   if ((k_h==k_w)&&(m_pads[0]!=m_pads[1])) {
-       std::cerr << "[ERROR] different padding for square kernel" << std::endl;
+       std::cerr << "[ERROR] different padding for square kernel not tested" << std::endl;
        return false;
   }