本文共 2120 字,大约阅读时间需要 7 分钟。
上一条文章,学习掌握了os库与json文件,这样我们较为方便地在自己标注数据后,将其划分到两个文件或多个文件夹里。imagefolder就支持这样的数据集类型(个人感觉这样的数据类型是很多不错的)
数据加载器 真正开始使用 还得datafolder
将所有花类分出来编码,感觉是生成一个字典吧
感觉意义不大
这一部视频里面写到了json里面,为啥呀?闲得慌
第三部 如何显示图像
第四步 学习训练步骤
net = AlexNet(num_classes=5, init_weights=True) net.to(device) loss_function = nn.CrossEntropyLoss() # pata = list(net.parameters()) optimizer = optim.Adam(net.parameters(), lr=0.0002) epochs = 10 save_path = './AlexNet.pth' best_acc = 0.0 train_steps = len(train_loader) for epoch in range(epochs): # train net.train() running_loss = 0.0 train_bar = tqdm(train_loader, file=sys.stdout) #生成一个进度条 for step, data in enumerate(train_bar): images, labels = data #这一步可以略微窥探dataloader中数据的组成格式 optimizer.zero_grad() outputs = net(images.to(device)) loss = loss_function(outputs, labels.to(device)) loss.backward() optimizer.step() # print statistics running_loss += loss.item() train_bar.desc = "train epoch[{}/{}] loss:{:.3f}".format(epoch + 1, epochs, loss) # validate net.eval() acc = 0.0 # accumulate accurate number / epoch with torch.no_grad(): val_bar = tqdm(validate_loader, file=sys.stdout) for val_data in val_bar: val_images, val_labels = val_data outputs = net(val_images.to(device)) predict_y = torch.max(outputs, dim=1)[1] acc += torch.eq(predict_y, val_labels.to(device)).sum().item() val_accurate = acc / val_num print('[epoch %d] train_loss: %.3f val_accuracy: %.3f' % (epoch + 1, running_loss / train_steps, val_accurate)) if val_accurate > best_acc: #那还能是零???奇怪极了 best_acc = val_accurate torch.save(net.state_dict(), save_path) #在理想路径中保存路径值 print('Finished Training')
转载地址:http://rfpowy.baihongyu.com/