So my first question is: how can I augment/stratify the dataset with all classes having nearly same percentage of samples?

The typical thing to do is keep a list-of-lists, say, self.data that contains for each class or stratum (first index) a list of examples. Then in your dataset’s __getitem__(self, idx) you use cls_no = idx % len(self.data) to get the class and then x = self.data[cls_no][(idx // len(self.data)) % len(self.data[cls_no])] to as the sample to return. You will then have to choose the epoch length appropriately, e.g. len(self.data) * max([len(x) for x in self.data]) or so. If you have a length shorter than that you might want to shuffle the order of the examples in self.data[…] after each epoch.

Shall I also format the class labels alike 1~7?

No, start at 0.
Best regards
Thomas