Use static shape where available in TensorFlow backend
Use static shape where available in TensorFlow backend

When running in graph mode, TensorFlow tensors have two types of shapes:
  - a static shape, known when the graph is built
  - a dynamic shape, only known when the graph is run

The static shape is important especially for the channels dimension, since the number of variables needed for a convolution depends on this shape.

In the current implementation, `einops` uses only the dynamic shape in graph execution mode, which means that static shape information is lost after calling one of the einops functions. I have updated the TensorFlow backend to only use dynamic shape information for dimensions where the static shape is unknown.
arogozhnikov/einops