import os.path import torch import torch.nn as nn from PIL import Image from torchvision import datasets from HerbModel import Model from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear from torch.utils.data import Dataset, DataLoader from torch.utils.tensorboard import SummaryWriter from torchvision.transforms import transforms img_transforms =transforms.Compose([ transforms.Resize(128), transforms.RandomHorizontalFlip(), transforms.RandomCrop(128), transforms.ToTensor(), transforms.Normalize([0.5, 0.5, 0.5],[0.5, 0.5, 0.5]) ]) img_transforms2 =transforms.Compose([ transforms.Resize(32), # transforms.RandomHorizontalFlip(), # transforms.CenterCrop(32), transforms.ToTensor(), transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5]) ]) # 数据加载 data_dir = '.' train_data = datasets.ImageFolder(os.path.join(data_dir, 'yaocai'), img_transforms) train_loader = DataLoader(train_data, 4,shuffle=True) print("训练数据集数量:{}".format(len(train_data))) model = Model() loss_fn = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) writer = SummaryWriter("yc_logs") epoch = 50 step = 0 for i in range(epoch): print("第{}轮训练开始。。。。。".format(i+1)) for data in train_loader: imgs, target = data # print(imgs.shape) output = model(imgs) # print(output) loss = loss_fn(output, target) print("损失:{}".format(loss)) argmax = output.argmax(1) acc = (argmax == target).sum() print("结果:{}".format(argmax)) print("实际:{}".format(target)) print("正确率:{}".format(acc/len(imgs)*100)) optimizer.zero_grad() loss.backward() optimizer.step() step = step + 1 print("第{}次训练".format(step)) step = 0 writer.close()