1、
print('cuda') if torch.cuda.is_available() else print('cpu')
输出cuda
这就像if else语句一样
2、
super(LeNet, self).__init__()
这是python2中的写法,python3中在子类的初始化函数中,关联父类的初始化方法,不用再super()函数中传参
super().__init__()
3、
DataLoader(dataset)中的dataset是Dataset类对象
4、
isinstance
判断一个变量是否是某个类型可以用isinstance()判断:
5、
net.parameters()可以返回网络的权重以及bias
6、
if __name__ == ‘__main__‘:
freeze_support()
在windows中使用Dataloader时,设置num_workers>0时出现上述错误,则需要在执行Dataloader前使用
if __name__ == '__main__':
7、获取数据
计算机视觉工具包import torchvision
主要有以下的工具包
torchvision.datasets: 一些加载数据的函数及常用的数据集接口;
torchvision.models: 包含常用的模型结构(含预训练模型),例如AlexNet、VGG、ResNet等;
torchvision.transforms: 常用的图片变换,例如裁剪、旋转等;
torchvision.utils: 其他的一些有用的方法。
8、
导入某个模块可以直接import ~.~
导入模块中的函数要from~ import ~
9、
从数据集中(Dataset类对象)中导出数据,生成迭代器,使用函数:
from torch.utils.data.dataloader import DataLoader
10、
类中的方法__call__
当一个类型实现了特殊方法__call__,该类的实例就变成了可调用的类型, 对象名() 等价于 对象名.call() ,有时候可以简化对象的调用,让对象变成可调用的对象, 实现__call__即可.
class TestCall(object):
def __init__(self):
self.name = "Xky"
def __call__(self, *args, **kwargs):
print("self.name: %s. " % self.name, end=' ')
print('__call__() is running ')
if __name__ == '__main__':
call = TestCall()
call() # call.__call__()
11、
在python3中, object类是Python中所有类的基类,如果定义一个类时没有指定继承哪个类,则默认继承object类。
在python2中如果不指定继承object类,则对象拥有的特性只有2个。
object类又称新式类,继承后对象的特性增多
12、
python中变量的作用域,global可以引入全局变量,nolocal可以引入函数外部作用域变量
x = 3
def func1():
x = 5
def func2():
global x
# nonlocal x
x = x+10
print("inner:", x)
func2()
print("outer:", x)
func1()
print("most outer:", x)
inner: 13
outer: 5
most outer: 13
x = 3
def func1():
x = 5
def func2():
# global x
nonlocal x
x = x+10
print("inner:", x)
func2()
print("outer:", x)
func1()
print("most outer:", x)
inner: 15
outer: 15
most outer: 3