设km为用keras的网络,km.layers得到该网络各层组成的列表。
获取第0层 km.layers[0]
获取第0层网络的类型type(km.layers[0])
获取第0层网络的信息 km.layers[0].get_config()
获取第0层网络的权重参数(如果有的话) km.layers[0].get_weights()[0]
设km为用keras的网络,km.layers得到该网络各层组成的列表。
获取第0层 km.layers[0]
获取第0层网络的类型type(km.layers[0])
获取第0层网络的信息 km.layers[0].get_config()
获取第0层网络的权重参数(如果有的话) km.layers[0].get_weights()[0]
首先weight_dict = torch.load(‘path_to_weight’)读取预训练网络的权重键值。
然后获取当前网络的权重键值
model_dict = model.state_dict() #model为当前定义的网络
最关键一步,根据键命名筛选出需要载入的部分权重。当前网络中要载入权重的部分,命名要与预训练网络相同
weight_dict = {k:v for k, v in weight_dict.items() if k in model_dict}
更新当前网络的键值字典
model_dict.update(weight_dict)
最后载入该键值字典到网络中
model.load_state_dict(model_dict)
标题
# 一级标题(最大的标题)
## 二级标题
…
###### 六级标题(markdown支持的最低标题)
列表
列表分有序和无序列表。有序列表是前面有序号的,用数字和. 表示(注意符号和文字间要有空格)
1. 第一项
2. 第二项
无序列表是子项前面显示的为黑点而不是数字。用*(星号)+(加号)或者-(减号)表示
– 第一项
– 第二项
嵌套列表。子项要以一个制表符或者4个空格缩进
* 大类
1. A
– b
图片

链接
[文字或图片](url) 如:
[我的主页](www.shijinglei.com)
制作图片链接把方括号内换成上面图片的形式即可。
字体
**加粗文本**
*斜体文本*
代码高亮
在行内标记小段代码
·code snippet ·
代码块
···代码语言(bash、java等)
代码
···
注意·为esc键下方的按键
水平分割线
***
错误信息为
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:717: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvWaitKey'
解决方式是pip 安装 opencv-contrib-python
pip install opencv-contrib-python
python中这两个内置的函数eval和exec都可以执行str形式的python表达式,比如说”print(a + b)” 。有时候可以派上用场。
eval函数形式
eval(source, globals=None, locals=None)
其中gobals和locals分别表示全局命名空间和局部命名空间,必须是dict形式。如果不提供则使用当前调用环境下的全局命名空间和局部命名空间。eval的返回值就是其中表达式的返回值。注意eval中的表达式不能是赋值表达式!!!
a = 10
def foo():
b = 12
c = eval("a+b")
print("c:",c)
d = eval("a+b",{"a":1,"b":2})
print("d:",d)
e = eval("a+b",{"a":1,"b":2},{"b":3})
print("e:",e)
f = eval("print(a+b)")
print("f:",f)
foo()
结果为
c: 22 d: 3 e: 4 22 f: None
exec函数形式
exec(source, globals=None, locals=None)
形式上同eval函数一样。exec函数中可以是赋值表达式。但exec与eval最主要的区别是它可以运行代码段,而eval中只能是单个表达式。 另外exec函数返回值永远是None!
snippet =
"""
a = 1
b = 2
c = a+b
print(c)
print("this is a code snippet")
"""
a = 10
def foo():
b = 12
c = exec("a+b")
print("c:",c)
d = exec("d=a+b\nprint('d:',d)")
exec(snippet)
foo()
结果为
c: None d: 22 3 this is a code snippet
当参数为空时,返回当前范围内的属性、变量、类型、 方法、 导入模块的列表
dir() ['__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'b', 'my_class', 'my_print', 'os', 'rdn', 'sys']
包含参数时,返回参数的属性、方法列表
dir([])
[‘__add__’, ‘__class__’, ‘__contains__’, ‘__delattr__’, ‘__delitem__’, ‘__dir__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__getattribute__’, ‘__getitem__’, ‘__gt__’, ‘__hash__’, ‘__iadd__’, ‘__imul__’, ‘__init__’, ‘__init_subclass__’, ‘__iter__’, ‘__le__’, ‘__len__’, ‘__lt__’, ‘__mul__’, ‘__ne__’, ‘__new__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__reversed__’, ‘__rmul__’, ‘__setattr__’, ‘__setitem__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’, ‘append’, ‘clear’, ‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]
help函数是python内置的一个比较有用的函数,它主要可以获取模块、数据类型、函数等的帮助信息。
1、获取模块的信息。注意如果该模块之前没有被import进来,那么需要在模块名外面加上引号。
help('os') #获取os模块的帮助信息
import os
help(os) #等同于上面一种方式
2、获取数据类型的帮助。如果直接是数据类型的名称,那需要加上引号。或者是该数据类型的实例
help('int')
a = 1
help(a)
输出信息如下(部分)
Help on class int in module builtins:
class int(object)
| int([x]) -> integer
| int(x, base=10) -> integer
|
| Convert a number or string to an integer, or return 0 if no arguments
| are given. If x is a number, return x.int(). For floating point
| numbers, this truncates towards zero.
可以看出这些内置的数据类型(int、float、str等)其实都是类
3、获取函数的帮助信息。直接是函数名就可以
help(help)
help([].append)
os.makedirs(path, exist_ok=False)
该语句可以建立用于迭代建立文件夹。exist_ok为bool值。当path不存在时,则会根据path迭代(划重点)的建立文件夹。当path存在时,若exist_ok为True时,则什么都不做,若为False,则会报文件夹已存在的错误。该语句可以很方便地替代以下语句:
if not os.path.exists(path):
os.mkdir(path)
最近遇到一个问题,用pytorch跑一个 不固定输入的模型inference,一张图片一张图片的测试。有两张图片分辨率相同,都是4032×3024,但是前一张图片可以跑,到后一张图片就报cuda out of memory的错误。原因是对于固定输入,pytorch会复用显存。而对于不固定输入的模型,pytorch存在显存释放不及时的问题,导致一直增长。解决方法是在每次inference后,手动释放显存
torch.cuda.empty_cache()
加上该语句之后就可以正常运行了
a = [i/10.0 for i in range(1,10,2)]
或者用numpy也可以
numpy.arange(0.1, 0.5, 0.01)