convolutional neural networks print("train labels shape:",train_labels_tensor shapeprint("train images shape:",train_images_tensor shapeprint("validation labels shape:",val_labels_tensor shapeprint("validation images shape:",val_images_tensor shape#load train and validation tensordatasets into the data generator for training train_loader dataloader(train_tensorbatch_size= num_workers= shuffle=trueval_loader dataloader(val_tensorbatch_size= num_workers= shuffle=trueoutput[train labels shapetorch size([ ]train images shapetorch size([ ]validation labels shapetorch size([ ]validation images shapetorch size([ ]with the training and validation datasets readylet' define the next important aspects for the network this includes the cnn itselfthe functions for trainingas well as evaluating and making predictions most of these constructs are borrowed from our previous example in we will tackle few new code constructs here in our cnnwe need to define convolutional unitas discussed previously each unit combines convolutional layer followed by batch normalization (optional)activationand max-pooling layers an important aspect to consider is the size of resultant image after each unit of convolution in this exampleour original image is of the size when we pass this through the first unit of convolutionthe image size shrinks based on our defined kernel size given that we have added single unit of padding to the input using 'padding= 'the original size remains same after convolution howeverwith the max pooling operationthe size is reduced