码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • spynet(一):光流估计代码介绍


    spynet代码语法介绍

    • spynet note
      • 1.ascontiguousarray函数
      • 2. if __name__ == "__main__"
      • 3. **kwargs 和 *args 再python中的使用方法
      • 4. click
      • 5. 设置CPU生成随机数的种子,方便下次复现实验结果
      • 6. typing的作用
        • 含义
        • 用法

    spynet note

    仓库:https://github.com/Guillem96/spynet-pytorch
    主要介绍spynet的代码实现,参考code
    该份code的网络结构写的不是很清晰,可以参考code

    下面主要介绍该仓库的代码和一些用到的语法

    1.ascontiguousarray函数

    将一个内存不连续存储的数组转换为内存连续存储的数组,使得运行速度更快。

    比如我们生成一个二维数组,Numpy可以通过.flags熟悉查看一个数组是C连续还是Fortran连续的

    利用ascontiguousarray函数,可以将其变为连续的比如:

    import numpy as np
    arr = np.arange(12).reshape(3,4)
    flags = arr.flags
    print(arr)
    print(flags)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    得到结果显示C连续
    在这里插入图片描述

    对数组切片之后,变成C不连续,这样会不方便存取内存,降低效率
    对其应用np.ascontiguousarray后,又会变为连续。

    arr2 = arr[1:3,1:3]
    flags = arr2.flags
    print(arr2, flags)
    
    arr2 = np.ascontiguousarray(arr2)
    flags = arr2.flags
    print(arr2, flags)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    代码运行结果
    在这里插入图片描述

    2. if name == “main”

    已知__name__ 是当前模块名,当模块被直接运行时模块名为 main 。

    这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不会被运行。

    if __name__ == "__main__":
        main() # 执行main函数
    
    • 1
    • 2

    3. **kwargs 和 *args 再python中的使用方法

    参考文章 How to Use *args and **kwargs in Python

    在python函数中使用 *args, **kwargs,让函数可以接受不确定数量的参数 和 关键字参数

    def main(**kwargs):
        train(**kwargs)
    
    • 1
    • 2

    4. click

    Click 是 Flask 的开发团队 Pallets 的另一款开源项目,它是用于快速创建命令行的第三方模块。

    我们知道,Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 Argparse,就好比 requests 相比于 urllib。

    Click 是一个第三方库,因此,在使用之前需要先安装:
    pip install click

    详细介绍参考 Python–Click

    Click 对argparse 的主要改进在易用性,使用Click 分为两个步骤:

    • 使用 @click.command() 装饰一个函数,使之成为命令行接口,
    • 使用 @click.option() 等装饰函数,为其添加命令行选项等。

    代码示例

    import click
      
    @click.command()
    @click.option('--count', default=1, help='Number of greetings.')
    @click.option('--name', prompt='Your name', help='The person to greet.')
    def hello(count, name):
        """Simple program that greets NAME for a total of COUNT times."""
        for x in range(count):
            click.echo('Hello %s!' % name)
    if __name__ == '__main__':
        hello()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5. 设置CPU生成随机数的种子,方便下次复现实验结果

    torch.manual_seed(0)

    [1]https://blog.csdn.net/qq_42951560/article/details/112174334

    6. typing的作用

    含义

    Python 类型注解是用来对变量和函数的参数返回值类型做注解,帮助开发者写出更加严谨的代码,让调用方减少类型方面的错误。

    但是,类型注解语法传入的类型表述能力有限,不能说明复杂的类型组成情况,因此引入了 typing 模块,来实现复杂的类型表达。

    用法

    典型的用法如下:

    from typing import List, Tuple, Dict
    # 把类型赋给别名,就可以定义类型别名。本例中,Vector 和 list[float] 相同,可互换
    Vector = list[float]
    
    def scale(scalar: float, vector: Vector) -> Vector:
        return [scalar * num for num in vector]
    
    # passes type checking; a list of floats qualifies as a Vector.
    new_vector = scale(2.0, [1.0, -4.2, 5.4])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    [1]https://docs.python.org/zh-cn/3/library/typing.html

  • 相关阅读:
    【Apifox】国产测试工具雄起
    使用python控制eTM-3020C程控电源
    redis悲观锁和乐观锁
    linux 服务器类型Apache配置https访问
    图扑软件智慧云展厅,开启数字化展馆新模式
    若依ruoyi系统报错:mybatis-plus报错,获取用户信息异常解决方案(借助ruoyi作为后台管理系统出现的bug)
    判断两个链表是否相交
    虚拟人三维动画宣传片案例分享 | 广州“五羊”城市文化IP商业体裸眼3D广告影片
    消防建筑防火3d实景漫游展示方案及特点
    Java 不定参传参
  • 原文地址:https://blog.csdn.net/tywwwww/article/details/127402327
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号