When rewriting the program written on the premise of Pytorch to Keras, it was necessary to replace the axes of the image data array, so I will share the method.
Image Channel Order
Channels First : (N, C, H, W) ← PyTorch Channels Last : (N, H, W, C) ← Keras
** N **: Number of images ** C **: Number of channels (color, etc.) ** H **: Image Height ** W **: Image Width
When learning a model with an image data array such as PyTorch, the ** Channels First ** format is common. The order of the dimensions of the image is ** (Channel, Height, Width) **. You can tell from the name that the Channel (Color) dimension is at the beginning of the array.
When dealing with image data arrays in Keras, PIL, OpenCV, etc., the ** Channels Last ** format is common. The order of the dimensions of the image is ** (Height, Width, Channel) **. You can tell from the name that the Channel dimension is at the end of the array.
Channels First → Channels Last
Create a temporary ** Channels First ** image array data.
Temporary image array data
img = np.arange(100*64*64*3).reshape(-1,3,64,64)
img.shape
(100, 3, 64, 64)
np.transpose()
%%timeit
img.transpose(0,2,3,1).shape
(100, 64, 64, 3)
791 ns ± 92.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
np.swapaxes()
%%timeit
np.swapaxes(img, 1, 3).shape
(100, 64, 64, 3)
1.54 µs ± 410 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
np.moveaxes()
%%timeit
np.moveaxes(img, 1, 3).shape
(100, 64, 64, 3)
9.29 µs ± 956 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
np.rollaxes()
%%timeit
np.rollaxes(img, 1, 4).shape
(100, 64, 64, 3)
2.89 µs ± 358 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
np.einsum()
%%timeit
np.einsum('ijkl->ilkj', img).shape
(100, 64, 64, 3)
1.77 µs ± 210 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
np.transpose () was the fastest. Please use the one you like.
[what-is-the-correct-way-to-change-image-channel-ordering-between-channels-first](https://stackoverflow.com/questions/43829711/what-is-the-correct-way- I referred to to-change-image-channel-ordering-between-channels-first).