先跑一遍代码再说。理解一下基本的套路。

1.数据预处理(transforms.Compose函数包含图像数据预处理的方法)

#数据预处理的方
data_transforms = {
    'train': transforms.Compose([
        transforms.Scale(230),
        transforms.CenterCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
    ]),
    'test': transforms.Compose([
        transforms.Scale(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
    ]),
}
#230 是自适应的缩小到大边长巍峨230的大小;
#224 是采用居中裁减的方式224*224;
#随机水平旋转
#转换从tensor变量

2.数据关联

使用函数datasets.ImageFolder(),第一个参数为数据集的文件夹路径、第二个参数为数据集的预处理方式,也就是上面的;

使用torch.utils.data.DataLoader()来加载数据。

data_directory = 'data'
trainset = datasets.ImageFolder(os.path.join(data_directory, 'train'), data_transforms['train'])
testset  = datasets.ImageFolder(os.path.join(data_directory, 'test'), data_transforms['test'])
 
trainloader = torch.utils.data.DataLoader(trainset, batch_size=5,shuffle=True, num_workers=4)
testloader  = torch.utils.data.DataLoader(testset, batch_size=5,shuffle=True, num_workers=4)

3.加载alexnex

第一句代表加载经过imagenet数据集训练后的参数

alexnet = models.alexnet(pretrained=True) 
 
for param in alexnet.parameters():
    param.requires_grad = False 
 
alexnet.classifier=nn.Sequential(
    nn.Dropout(),
    nn.Linear(256*6*6,4096),
    nn.ReLU(inplace =True),
    nn.Dropout(),
    nn.Linear(4096,4096),
    nn.ReLU(inplace=True),
    nn.Linear(4096,2),)
# 加载经过数据集训练后的数据
# 将参数 re......设置为 False可以限制这些参数更新,便于下面的重新定义,这样就
# 保证只是更新下面定义的内容
# 将最后的输出改成2层

4.看一下alexnet的网络架构

主要分为 features 和classifier ,一个负责卷积,一个负责分类。(注意这里我应经将最后的输出改成2类了)要知道怎么改这个网络参数。
在这里插入图片描述
5.训练加测试
在这里插入图片描述
6.将结果显示

  95% 
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐