栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

最详细代码注释之深度学习经典网络--2AlexNet

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最详细代码注释之深度学习经典网络--2AlexNet

data_transform { train : transforms.Compose([transforms.RandomResizedCrop(224), # 随机裁剪 224x224像素 transforms.RandomHorizontalFlip(), # 水平方向随机反转 transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]), val : transforms.Compose([transforms.Resize((224, 224)), # cant 224 must 224 224 transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])} # 获取数据集所在根目录 train_dataset datasets.ImageFolder(root ./train , transform data_transform[ train ]) # 数据预处理 train_num len(train_dataset) # 打印数据集有多少张图片 # # { daisy :0, dandelion :1, roses :2, sunflowers :3, tulips:4 } flower_list train_dataset.class_to_idx #获取分类的名称所对应的索引 cla_dict dict((val, key) for key, val in flower_list.items()) # 将键值和value对调 json_str json.dumps(cla_dict, indent 4) # 通过json包 将cla_dict进行编码成json格式 with open( class_indices.json , w ) as json_file: # 保存到一个json文件当中 json_file.write(json_str) batch_size 32 train_loader torch.utils.data.DataLoader(train_dataset, batch_size batch_size, shuffle True, num_workers 0) validate_dataset datasets.ImageFolder(root ./val , transform data_transform[ val ]) val_num len(validate_dataset) validate_loader torch.utils.data.DataLoader(validate_dataset, batch_size batch_size, shuffle False, num_workers 0) # 查看数据集的代码 # test_data_iter iter(validate_loader) # test_image, test_label test_data_iter.next() # def imshow(img): # img img / 2 0.5 # npimg img.numpy() # plt.imshow(np.transpose(npimg, (1, 2, 0))) # plt.show() # print( .join( %5s % cla_dict[test_label[j].item()] for j in range(4))) # imshow(utils.make_grid(test_image)) 非常有用 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) #学习率自己调整 save_path ./AlexNet.pth best_acc 0.0 for epoch in range(10): net.train() # 我们使用了dropout 我们只希望在训练中随机失活 但是在预测过程中不希望他起作用 net.train()开启dropout net.eval()关闭dropout running_loss 0.0 t1 time.perf_counter() # 训练一个epoch所需时间 for step, data in enumerate(train_loader, start 0): images, labels data optimizer.zero_grad() outputs net(images.to(device)) loss loss_function(outputs, labels.to(device)) loss.backward() optimizer.step() # print statistic running_loss loss.item() # print train process rate (step 1)/ len(train_loader) a * * int(rate * 50) b . * int((1 - rate) * 50) print( r train loss:{:^3.0f}%[{}- {}]{:.3f} .format(int(rate * 100), a, b, loss), end ) print() print(time.perf_counter()-t1) net.eval() acc 0.0 with torch.no_grad(): # 禁止参数跟踪 for data_test in validate_loader: test_images, test_labels data_test outputs net(test_images.to(device)) predict_y torch.max(outputs, dim 1)[1] # 输出最大值作为预测 acc (predict_y test_labels.to(device)).sum().item() accurate_test acc / val_num if accurate_test best_acc: best_acc accurate_test torch.save(net.state_dict(), save_path) print( [epoch %d] train_loss: %d.3f test_accuracy:%.3f % (epoch 1, running_loss / step, acc / val_num))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267860.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号