当前位置: 首页 > news >正文

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)

得到结果显示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)

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

2. if name == “main

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

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

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

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

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

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

def main(**kwargs):
    train(**kwargs)

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()

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]https://docs.python.org/zh-cn/3/library/typing.html

相关文章:

  • 做免费小说网站怎样赚钱/网络优化seo薪酬
  • 临沂网站建设费用/网络推广专员所需知识
  • php做网站时间代码/长沙网络推广哪家
  • 网站水军怎么做/seo营销方案
  • 集团网站建设方案/免费的网页网站
  • 网站建设和源代码问题/百度视频seo
  • 适合前端开发的VS Code插件
  • 前端页面实现主题的动态切换
  • SQL Server 数据库排序规则报错“由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN fid 失败”解决办法
  • C生万物 | 第一篇 —— 初识C语言【适合入门,建议收藏】
  • 嵌入式系统开发笔记102:DEV C++的使用
  • 打开算法之门,解释什么是算法
  • 基于JAVA爱馨敬老院网站计算机毕业设计源码+系统+lw文档+部署
  • MyBatisPlus3.x
  • C语言|图解指针变量
  • Linux系统编程·进程概念引入
  • 苹果认证Apple Store Connenct api的使用
  • HashMap和Hashtable(全网最详细)