深度学习的一种应用框架的思考

深度学习框架包括的模块有

  1. 数据读取
  2. 参数设置
  3. 模型设置
  4. 训练主程序
  5. 推理主程序
  6. 辅助的工具函数和类

数据读取

数据读取模型的作用是读取数据,将数据整理成合理大小,同时也会对数据进行一系列的预处理,输入到模型中去,所以,一般会使用迭代器的方法对数据进行读取。具体的结构如下:

class Iter:

    def __init__(self, opt):
	    """
	    opt是输入的参数的类,它包含了数据读取中所有需要的参数。
		"""
      
    
    def __len__(self):
        """
        返回的是一共包含的样本事件的长度,也就是数据集的长度
        """
        return 
    
    def __getitem__(self, item):
        """
        对数据进行迭代,当然,在python中,
        你也可以使用__iter__和__next__这2种方法构建一个合理的数据迭代器,
        我比较推荐使用__iter__和__next__方法构建迭代器,
        因为这样的话,你对引用的数据超出数据集长度的错误处理就会更加清晰,
        比如说,在使用for循环遍历__getitem__产生的迭代器时,
        退出循环的条件是__getitem__中的代码出现错误,
        这时尽管列表和字典产生的错误是相同的,
        但是,使用列表做索引时,产生的错误不会引发程序报错,字典会。
        因此,最好使用__iter__和__next__方法构建迭代器,
        只需要在__next__中定义好错误的类型,不论索引是字典还是列表,都不会出现程序运行时报错。
        比如说。
        class Fibonacci(object):
		    def __init__(self):
		        self.a, self.b = 0, 1
		
		    def __iter__(self):
		        return self         # 实例自己就是一个迭代对象,所以返回自身
		    
		    def __next__(self):
		        self.a, self.b = self.b, self.a + self.b    # 计算下数列中的下一个值
		        if self.a > 66:  # 计算下一个值到特定条件时退出循环
		            raise StopIteration()
		        return self.a   # 返回下一个值

        """
        return 
           
     

之后直接使用各种深度学习的框架中自带的api对数据进行读取,以输送到模型中。

参数设置

在参数设置中,一般使用一个类来保存所有的参数,然后通过继承的方法来定义训练,验证,推理时的参数类。

模型设置

这个模块在设计的时候,主要依据是算法的原理和调用的便捷性,只要注意复现算法的正确性就行了,所以一般会使用一些辅助性的工具来帮助分析算法,比如说,画模型结构图的包,等等

训练主程序

在训练的主程序中,有几个部分需要注意

  1. 模型训练的时候,要定义好优化器和学习率的迭代。
  2. 保存模型时,需要将模型和优化器的参数都进行保存,以便于再训练。
  3. 优化器和学习率的迭代都是比较重要的部分,需要根据不同任务设置不同的优化器和学习率的迭代方式。
  4. loss函数是需要根据不同的任务进行建模之后,再做选择,或者,也可以自己定义一种loss函数。
  5. 在验证集验证模型的时候,需要注意停止模型的梯度计算,以防止模型在训练过程中,内存不断增加,最后导致溢出,终止程序运行的结果。
"以pytorch为框架,主要的流程如下"
def main():
    device = "模型训练的装备"
    epoch = "训练的轮次"
    
    # 数据集
    train_opt = "训练数据集参数"
    val_opt = "验证数据集参数"
    train_data = "训练数据集"
    val_data = "验证数据集"
 
    model = "自己定义的模型"
    model.to(device)
    optim = "自己定义的优化器"
    criterion = "自己定义的loss函数"
    lr_step = "自己定义的学习率迭代函数"
   
    for itr in range(1, epoch + 1):
        
        model.train()
        for j, data in enumerate(train_data):
            inputs = data['x'] # 输入模型的数据
            targets = data['y'] # 模型的目标集
            outs = model(inputs) # 进行推理
            loss = criterion(outs,targets)
            # 反向传播算法
            optim.zero_grad()
            loss.backward()
            optim.step()
        
       
        # 保存网络参数
        torch.save(
        {
        model: "模型参数"
        optim: "优化器参数"
		}
        )
        
        model.eval()
        with torch.no_grad(): # 确保不会进行梯度计算
            for j, data in enumerate(val_data):
                inputs = data['x'] # 输入模型的数据
	            targets = data['y'] # 模型的目标集
	            outs = model(inputs) # 进行推理
	            loss = criterion(outs,targets)
	            
       lr_step # 学习率迭代         
                   

if __name__ == '__main__':
  """
  调试函数
  """
  main()
 

推理主程序

使用模型进行推理的时候,需要注意模型结果的保存

辅助的工具函数和类

这个模块一般用于保存一些工具类的函数,用以辅助分析数据和建立模型。

参考

Python知识点 – 5.1 定制类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值