每周碎片知识1

1️⃣[Python]
assert用法:

assert expression
等价于
if not expression: raise AssertionError


2️⃣[Pytorch]
Pytorch view:
创建一个新的tensor,但他们的data是共享的


3️⃣[Pytorch]
在Pytorch中,embedding的index是不能requires_grad=True的,否则会出错。
https://github.com/pytorch/pytorch/issues/7021

之前看过一份代码,设置volatile=false但没有出错,是因为在Pytorch0.4之后volatile已经被弃用了,因此volatile=false不起作用,而默认requires_grad=false


4️⃣[Pytorch]
在Pytorch中,nn.Linear(self.hidden_dim,self.vocab_size)的维度是vocab_sizehidden_dim,之前居然没有注意到这个问题。
因为nn.Linear的*第一个参数表示输入维度,第二个参数表示输出维度


5️⃣[Pytorch]
Pytorch中,使用view一般来说必须要用 .contiguous()。也即:

1
batch.view(batch_size, -1).t().contiguous()

contiguous()的官方解释:
https://discuss.pytorch.org/t/runtimeerror-input-is-not-contiguous/930

It means that your tensor is not a single block of memory, but a block with holes. view can be only used with contiguous tensors, so if you need to use it here, just call .contiguous() before.

也就是说,contiguous会将数据存到一个连续的空间内(block)。


6️⃣[Pytorch]
调用Cross_entropy时,Pytorch会帮助你加log和softmax。


7️⃣[Paper]
Sliced_RNN

将RNN分块以提高并行性,甚至每层的RNN都可以不一样,达到抽取不同程度的抽象语义信息的目的。实验证明,在不同任务上都有一定的提升,但速度的提升很大。


8️⃣[Tf-idf]
计算词语对于句子的重要程度

https://zh.wikipedia.org/wiki/Tf-idf

tf是词频,idf是逆向文件频率。也即如果词在该句出现的次数越多,在所有文本的出现次数越少,则词对于句子的重要程度越高。


9️⃣[Numpy]
在Numpy中,一个列表虽然是横着表示的,但它是列向量。我之前居然没有注意到这个问题。