before we beginthe mathematical building blocks of neural networks manipulating tensors in numpy in the previous examplewe selected specific digit alongside the first axis using the syntax train_images[iselecting specific elements in tensor is called tensor slicing let' look at the tensor-slicing operations you can do on numpy arrays the following example selects digits # to # (# isn' includedand puts them in an array of shape ( )my_slice train_images[ : print(my_slice shape( it' equivalent to this more detailed notationwhich specifies start index and stop index for the slice along each tensor axis note that is equivalent to selecting the entire axisequivalent to the previous example my_slice train_images[ : ::my_slice shape also equivalent to the ( previous example my_slice train_images[ : : : my_slice shape ( in generalyou may select between any two indices along each tensor axis for instancein order to select pixels in the bottom-right corner of all imagesyou do thismy_slice train_images[: : :it' also possible to use negative indices much like negative indices in python liststhey indicate position relative to the end of the current axis in order to crop the images to patches of pixels centered in the middleyou do thismy_slice train_images[: :- :- the notion of data batches in generalthe first axis (axis because indexing starts at in all data tensors you'll come across in deep learning will be the samples axis (sometimes called the samples dimensionin the mnist examplesamples are images of digits in additiondeep-learning models don' process an entire dataset at onceratherthey break the data into small batches concretelyhere' one batch of our mnist digitswith batch size of batch train_images[: and here' the next batchbatch train_images[ : and the th batchbatch train_images[ : ( )licensed to