pytorch网络结构搭建

torch

网络构建 经典操作

1. 数据预处理

#提取图片
image_dataset=atasets.ImageFolder(path, transforms) #从文件取一类图片 可以选者数据增强 , 
transform.compose([ ]) # 可以选择多种增强方式
#加载图片
torch.utils.data.DataLoader( image_dataset, batch_size=batch_size, shuffle=True)
 #读取图片的标签
     with open(' ','r') as f:
	class_names=json.load(f)

2. 模型加载

model_ft = model.resnet18(pretrain=True)   #使用预训练权重
冻结 网络
for param in model_ft.parameters():
param.requirr_grad=False

#加载自己的全连接层,

model_ft.fc= nn. Linear(model_ft.fc.in_features,  class_num) 类别自己来

3. 模型编译

#找出要权重更新的参数
paramrs_to_update = []
for name, param in model_ft.named_paramters():
if param.requires_grad==True:
	params_to_updata.append(param)
optimizer_ft = optim.Adam(params_to_update)
scheduler = optim.lr_scheduler.Steplr(optimize_ft,step_size=10)
criterion = nn.CrossEntropyLoss( )

4. 模型训练

model_ft.train()
# 把数据都取个遍
        for inputs, labels in dataloaders['train']:
''''
dataiter = iter(dataloaders['valid'])
images, labels = dataiter.next()
output = model_ft(images.cuda())         也可用迭代器取数据
''''
     inputs = inputs.to(device)#放到你的CPU或GPU
 	optimizer.zero_grad()  # 先梯度清零 torch 的bug 只有训练的时候计算和更新梯度,注意权重都还在
	 outputs = model(inputs)
     loss = criterion(outputs,labels)
	loss.backward() #反向传播
	optimizer.stet()  # 权值更新    
     
#迭代一次
scheduler.step()#学习率衰减

5. 模型保存

state = {
              'state_dict': model.state_dict(),#字典里key就是各层的名字,值就是训练好的权重
              'best_acc': best_acc,
              'optimizer' : optimizer.state_dict(),
            }

torch.save(state, filename)

6. 模型加载

#1.加载模型文件
chechpoint=torch.load(filenema)
#2.权重更新
model.load_state_dict(checkpoit)
checkpoint # 可以为字典 
eg: 
如上 可以保存跟多东西
但是加载 只能加载  model.state_dict()
eg model.load_state_dict(checkpoint['state_dict'])

7. 模型预测

model.eval()
preds = model(inputs)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值