pytorch报错

为什么需要每次计算梯度都要清空

根据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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值