5 Star 1 Fork 1

嘉油/Pytorch快速分类微型框架

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

fcf快速构建

文件夹结构解释

  • interface.py:接口定义
  • base.py:接口的基础实现
  • extend.py:在基础实现上进行自己特有的改造(可仿造我写的进行)。
  • utils.py:工具类

框架架构

这个文件主要描述我的微框架将会实现什么功能

写代码之前需要先把文档写好,不然改来改去的很low

首先我需要列出我所需要的功能以及划分

  1. 我希望我的框架写出来是链式编程,上次只是部分链式,差点意思

  2. 随机种子、设置种子,保证我能复现

  3. 单独的一个类(信息类)用作数据库保存, 存放我需要输出的信息等, 并且我需要使用pandas模块, 这样我才能够很好的使用里面的plot(),以及保存为excel等等

    • 之前由于没有学习过pandas,所以写的很蠢。当然现在也只是很浅显,但足够。
  4. 我需要一个单独的配置类并且在训练之前输出配置信息, 而且我希望,能有一个单独的模型保存功能,这个模型保存不仅仅是pytorch模型的保存, 我希望可以把我这个类的相关信息都保存下来,用作复原,不过感觉这个很费时间, 因此后续在更新吧。

    • 一直写在__init__最后也是堆成一大堆,很难看,最后也是不好改。
    • 如果我可以利用继承就不会出现屎山的情况。
  5. 模型工具类:这个类包括训练、测试,根据输入的不同(输入不同,自己继承重写方法)(要有可移植性)进行训练,把一些基本信息传出。

    • 传出给 保存信息类,这个保存信息类必须是模型工具类__init__初始化参数,不然我无法通过继承去修改。
    • 训练的时候还需要看准确率吗?看的话信息就无法分离了(思考)
      • 写一个单独的方法,做一次训练,这样这一次训练是封装好了的,如果要改,就把这个函数继承了,并且记得super().xxx()。
      • 这个方法会传出这个循环的信息,用于统计,统计信息放入保存信息类的某个方法,这样就可以通过继承修改了。****
  6. 保存信息类:这个类根据上述类传回的信息,进行下一步的操作。信息保存到信息类中。

    • 根据配置类判断是否进行下一步操作:

      • 保存模型文件?
      • 保存训练相关信息:这个最重要,我希望这次训练的东西要和信息分离,不然可移植性非常差。 我做到要移植的时候只需继承类就行。
      • 输出表格、图像等(利用pandas很容易
    • 如果我要添加额外的信息统计,并且保存到信息类中,这要如何做?

      • 继承上面的保存信息类,然后添加额外的东西保存到信息类的字典
  7. 汇总工具类:将上述所有类组合起来,哪怕我要更新,也只要修改部分内容即可。

详细功能

不带Base的都是接口,无法使用,只是让我写写接口(奥利给)

基础类Source:统一管理基本的操作,如__str__这样的方法

信息类BaseInfo:存储所有信息,主要作用是保存和管理信息

  • 支持继承

配置类BaseConfig:配置模型、参数等,输出配置信息,配置一些特殊选项(例如半精度、采用softmax等)

  • 支持继承
  • 保存和加载模型

保存信息类BaseInfoManager:根据传入的信息,计算信息,并保存到Info类中。

  • 支持继承
  • __init__:需要提供信息类配置类
  • 保存什么信息也是需要配置类

模型工具类BaseTools:训练、测试等

  • 支持继承
  • __init__:需要提供保存信息类配置类
  • 提供一个循环训练、测试的方法,返回训练的结果,然后调用保存信息类的方法。

基础框架类BaseFrame:用于使用覆盖上面的内容。

  • 支持继承,但是有必要吗?俺不懂奥
  • __init__(可选):信息类保存信息类配置类模型工具类
  • 由BaseFrame进行链式编程、调用上述模块的内容。

强调: 结构基本如此,具体看具体的接口

继承的小例子,与Java几乎一致


class A():
    pass
    def show(self):
        print('我是A')

class B(A):
    def __init__(self):
        super().__init__()

    def show(self):
        super(B, self).show()
        print('我是B')


if __name__ == '__main__':
    a = A()
    b = B()
    a.show()
    # 我是A
    b.show()
    # 我是A
    # 我是B
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/l1binn/fast_classification_framework.git
git@gitee.com:l1binn/fast_classification_framework.git
l1binn
fast_classification_framework
Pytorch快速分类微型框架
master

搜索帮助