为什么需要每次计算梯度都要清空
根据pytorch中的backward()函数的计算,当网络参量进行反馈时,梯度是被积累的而不是被替换掉;但是在每一个batch时毫无疑问并不需要将两个batch的梯度混合起来累积,因此这里就需要每个batch设置一遍zero_grad 了。
为什么要with torch.no_grad():
更新时:w1 -= learning_rate * w1.grad
w2 -= learning_rate * w2.grad
它也是一张计算图(所有的tensor运算都是一张计算图),为了不让它占用过多内存,需要with torch.no_grad(),这样就不会把每个batch的grad记住
在神经网络中,参数默认是进行随机初始化的。如果不设置的话每次训练时的初始化都是随机的,导致结果不确定。如果设置初始化,则每次初始化都是固定的。
import random
np.random.seed(a)
torch.manual_seed(a)
torch.cuda.manual_seed(a) #gpu
random.seed(a)
Python之random.seed()用法
import random
随机数不一样
random.seed()
print(‘随机数1:’,random.random())
random.seed()
print(‘随机数2:’,random.random())
随机数一样
random.seed(1)
print(‘随机数3:’,random.random())
random.seed(1)
print(‘随机数4:’,random.random())
random.seed(2)
print(‘随机数5:’,random.random())
‘’’
随机数1: 0.7643602170615428
随机数2: 0.31630323818329664
随机数3: 0.13436424411240122
随机数4: 0.13436424411240122
随机数5: 0.9560342718892494
‘’’
x.read(:100)
返回从字符串中读取的字节。
怎样找出一个序列中出现次数最多的元素呢?
collections.Counter
Counter().most_common(x)
出现频率最高的x个单词(这里的x一般指的是词表的大小)
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
seq = [‘one’, ‘two’, ‘three’]
for i, element in enumerate(seq):
… print i, element
…
0 one
1 two
2 three
get()方法语法:
dict.get(key, default=None)
key – 字典中要查找的键。
default – 如果指定键的值不存在时,返回该默认值。
torch.multinomial(input, num_samples,replacement=False, out=None) → LongTensor
作用是对input的每一行做n_samples次取值,输出的张量是每一次取值时input张量对应行的下标。
输入是一个input张量,一个取样数量,和一个布尔值replacement。
SyntaxError: positional argument follows keyword argument
出现这个bug的原因在于参数位置不正确,关键字参数必须跟随在位置参数后面! 因为python函数在解析参数时, 是按照顺序来的, 位置参数是必须先满足, 才能考虑其他可变参数.
model = RNNModel(“LSTM”,vocab_size = len(TEXT.vocab),embed_size = EMBEDDING_SIZE, hidden_size=HIDDEN_SIZE,2,dropout=0.5)变为
model = RNNModel(“LSTM”,vocab_size = len(TEXT.vocab),embed_size = EMBEDDING_SIZE, hidden_size=HIDDEN_SIZE,nlayer=2,dropout=0.5)
strip()
str = "00000003210Runoob01230000000";
print str.strip( '0' ); # 去除首尾字符 0
3210Runoob0123
str2 = " Runoob "; # 去除首尾空格
print str2.strip();
Runoob
setattr() 函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的。
用法:setattr(object, name, value)