pytorch深度学习编程框架

1 数据流

根据任务需要读取数据
包括:(原始数据-可以输入模型的数据)
数据的组织形式: one task需要的数据形式
数据内容: 需要什么样的预处理 如:归一,数据增强等

数据输入模型前需要部署到cuda上

Variable(samples).cuda(GPU)

2 模型

定义模型

将模型定义在一个类中
通常有init(模型初始化)forward(执行模型–前向传播)方法
该类继承nn.Module,可以调用nn.module中的属性或方法

class RelationNetwork(nn.Module):
    def __init__(self,input_size,hidden_size):
        super(RelationNetwork, self).__init__()
        self.layer1 = nn.Sequential(
                        nn.Conv2d(128,64,kernel_size=3,padding=0),
                        nn.BatchNorm2d(64, momentum=1, affine=True),
                        nn.ReLU(),
                        nn.MaxPool2d(2))
        self.layer2 = nn.Sequential(
                        nn.Conv2d(64,64,kernel_size=3,padding=0),
                        nn.BatchNorm2d(64, momentum=1, affine=True),
                        nn.ReLU(),
                        nn.MaxPool2d(2))
        self.fc1 = nn.Linear(input_size*3*3,hidden_size)
        self.fc2 = nn.Linear(hidden_size,1)

    def forward(self,x):
        out = self.layer1(x)
        out = self.layer2(out)
        out = out.view(out.size(0),-1)
        out = F.relu(self.fc1(out))
        out = F.sigmoid(self.fc2(out))
        return out

初始化模型

创建模型类实例,会自动调用init方法,进行模型初始化

relation_network = RelationNetwork(FEATURE_DIM,RELATION_DIM)

打印模型

print(relation_network)

权值初始化(可选)

自定义初始化

feature_encoder.apply(weights_init)

加载预训练

    if os.path.exists(str("./models/miniimagenet_relation_network_"+ str(CLASS_NUM) +"way_" + str(SAMPLE_NUM_PER_CLASS) +"shot.pkl")):
        relation_network.load_state_dict(torch.load(str("./models/miniimagenet_relation_network_"+ str(CLASS_NUM) +"way_" + str(SAMPLE_NUM_PER_CLASS) +"shot.pkl")))
        print("load relation network success")

部署到cuda

relation_network.cuda(GPU)

执行模型–前向传播

relations = relation_network(relation_pairs)

模型设置为训练模式

feature_encoder.zero_grad()

模型设置为测试模式

存储模型

torch.save(relation_network.state_dict(),str("./models/miniimagenet_relation_att_network_"+ str(CLASS_NUM) +"way_" + str(SAMPLE_NUM_PER_CLASS) +"shot_"+str(episode)+".pkl"))

3 优化

定义优化器

relation_network_optim = torch.optim.Adam(relation_network.parameters(),lr=LEARNING_RATE)

学习率时刻表

relation_network_scheduler = StepLR(relation_network_optim,step_size=100000,gamma=0.5)

执行优化器(时刻表)

feature_encoder_scheduler.step(episode)

计算损失

mse = nn.MSELoss().cuda(GPU)
loss = mse(relations,one_hot_labels)

反向传播

loss.backward()

梯度截断

torch.nn.utils.clip_grad_norm(relation_network.parameters(),0.5)

执行优化

relation_network_optim.step()

4 损失

5 日志

========

通用代码积累

常见数据预处理

复杂模型

优化器

学习率调整

自定义的参数优化设置

权值加载与存储

========

自己的框架

数据流模块

调用某个方法可得到可以输入模型的数据

模型定义模块

创建模型实例等于创建模型,调用forward方法等于执行模型

模型初始化模块

损失模块

*run模块

调用方法得到可以输入模型的数据–用数据流模块

  • 数据部署到cuda

创建模型实例–用模型定义模块

模型初始化–用模型初始化模块

模型部署到cuda

定义优化器

定义优化器时刻表

执行优化器(时刻表)

执行模型–前向传播

模型设置为训练模式

计算损失

反向传播

执行优化

设置模型为测试模式

计算准确率

输出日志

存储模型

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值