学习深度学习看到这样一个用法:
def sgd(params, lr, batch_size): #@save
"""小批量随机梯度下降"""
with torch.no_grad():
for param in params:
param -= lr * param.grad / batch_size
param.grad.zero_()
with除了用来打开文件,还有以下的用法:
简单剥离出with的部分:
with torch.no_grad:
...
使用with打开torch.no_grad后,有以下动作:
1.计算torch.no_grad的值,甚至可以使用:
with torch.no_grad as tng:
...
这时值就会传到tng
2.检测类中是否有__enter__,__exit__两个函数,若没有会报错。
关于类的一些知识点:
写了这么一个实例代码:
class Dog:
def __init__(self,name,age):
self.name=name
self.age=age
def __enter__(self):
print(self.name)
def __exit__(self):
print(self.age)
def sit(self):
print(f"{self.name} is sitting")
print(self,type(self))
return self.name
def roll(self):
print(f"{self.age} rolled over")
mydog=Dog('wz',1)
mydog.sit()
①self是什么?
约定俗成在__init__中的第一个变量就是self,它可以指类中的一个实例。