2.21日学习笔记|2.22日学习笔记|2.23学习笔记

1.git更新本地项目到远程仓储。

https://blog.csdn.net/u014135752/article/details/79951802

我是fork了别人的项目,然后下到了本地,阅读后加上了注释,想要更新到我的github上,但是又怕更新到人家的那个上面,把人家出事的给覆盖了。

https://stackoverflow.com/questions/20939648/issue-pushing-new-code-in-github/28009046

出现了 git pull的问题。

git的分支到底是什么意思?

https://backlog.com/git-tutorial/cn/stepup/stepup1_1.html

 也就相当于不同的文件夹,文件夹之间可以合并,这是我的理解。

https://www.jianshu.com/p/8265d29a0ba5

使用git branch可以查看当前分支的名字,git branch -r查看远程分支的名字。

https://blog.csdn.net/ming13849012515/article/details/81011632

本地仓储的branch和别的不能建立联系的话,就使用:git branch --set-upstream-to=origin/远程分支的名字 本地分支的名字 。

出现问题:

Updates were rejected because the tip of your current branch is behind its remote counterpart. 

 https://blog.csdn.net/zhangkui0418/article/details/82977519

但 git pull --allow-unrelated-histories 又出现了一下错误:

The following untracked working tree files would be overwritten by merge:

 https://stackoverflow.com/questions/17404316/the-following-untracked-working-tree-files-would-be-overwritten-by-merge-but-i

git add * 
git stash
git pull

还是都不行啊。

还是解决不了,我决定换一种方法了。。

但是又出现了等问题,

Everything up-to-date Branch 'master' set up to track remote branch 'master' from 'origin'.

而且首先是这个"fatal: HttpRequestException encountered. "https://stackoverflow.com/questions/2936652/git-push-wont-do-anything-everything-up-to-date

大意是需要windows桌面版本才可以push

终于可以了,原来是账号登录不对了,我真的枯了。

2020-2-22————————————

2.为什么softmax要取log?

https://blog.csdn.net/LEILEI18A/article/details/101284481

https://blog.csdn.net/tongjinrui/article/details/79724074

因为我们可以看一下-log的曲线,在取softmax之后数据归到【0,1】之间,那么当取值接近于0时,当label预测趋近于错误时,损失函数相应会很大,反之靠近1,就很小。这样就可以满足损失函数的要求了。

3.返回的loss是否要求梯度了呢?

看到这个代码就突发了一个问题,那么loss的返回结果是什么呢?看了一下损失函数的返回类型是一个scalar,也就是标量,那么requires_grad值是什么呢?

进行了下面的小实验:

import torch
a=torch.tensor(0.1)
print(a)
print(a.item())
b=torch.tensor([0.1])
print(b)
print(b.item())
c=torch.tensor([0.1],requires_grad=True)
print(c)
print(c.item())

#结果:
tensor(0.1000)
0.10000000149011612
tensor([0.1000])
0.10000000149011612
tensor([0.1000], requires_grad=True)
0.10000000149011612
>>> a.requires_grad
False
>>> b.requires_grad
False
>>> c.requires_grad
True

原来创建tensor默认requires_grad就是False,我之前一直为误以为是True。。。所以就不必像那样声明requires_grad是False。。

3.出现了这个Nosetests的问题,真是气死了。。

 https://blog.csdn.net/kongsuhongbaby/article/details/96488949

这个解决办法原来是可以的!就是不能以test开头函数名或者类型!

2-23——————————————

1.momentum 动量到底在优化函数中有什么意思??

 https://towardsdatascience.com/stochastic-gradient-descent-with-momentum-a84097641a5d 这个我还看不太明白。

它是一种像SGD的优化方法,不过SGD是直接通过当前的梯度来更新参数,momentum有不同的更新参数的公式。

https://www.zhihu.com/question/305638940 

 用来更新参数的Vt,计算是通过前一时刻的Vt-1和现阶段的梯度来计算的。

https://zhuanlan.zhihu.com/p/61955391 这个讲的蛮不错的。

 

 这里也涉及到了指数加权平均exponentially weighted averges。

2.divmod

把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。

>>>divmod(7, 2)
(3, 1)
>>> divmod(8, 2)
(4, 0)

3.keepdim=True

原来不是直接转换成one-hot呢。

import torch
a=torch.tensor([[1,2,3],[6,5,4]])
print(a.data.max(1,keepdim=True)[1])


#结果:
tensor([[2],
        [0]])
>>> b=torch.tensor([1,2])
>>> b.view_as(torch.tensor([[2],
        [0]]))
              
tensor([[1],
        [2]])

 返回的是保持原来y轴0轴上的维度。

 4.CNN中Chanel的变换

为啥输入一个通道,就能够输出10个通道数??

明白了,那如果输出的Chanel是10将会有10个size一样的卷积核(过滤器)。

对于mnist,这种二维的,kenel_size应该是默认变为(5,5)

从这个简单的例子中就可以看出来:

import torch
import torch.nn as nn
m = nn.Conv2d(16, 33, 3, stride=2)
input = torch.randn(20, 16, 50, 100)
output = m(input)

#输出:
>>> output.size()
              
torch.Size([20, 33, 24, 49])

计算公式如下:

 #搞明白了,真的好开心呐~

2020-5-25更新————————

#我知道我为什么看了那么多次,还是不明白的原因了,因为我还是无法将它和nlp在具体应用时结合起来。

见《textcnn》那篇文章,有针对讲解了。

5.pytorch正常的RNN该怎么写?

看到这个教程这么写,我觉得非常奇怪啊,这样的话那就每次只进行了一次forward,没有timestep??

并且每次都initHidden,那么如何保留上一个时间步的输出?RNN不是会记忆吗?如果重新初始化为0,那记忆又是怎么实现的呢???

 https://www.pytorchtutorial.com/pytorch-sequence-model-and-lstm-networks/  和https://pytorch.org/tutorials/beginner/nlp/sequence_models_tutorial.html

最终的最终,我还是没搞明白什么时候要初始化hidden,就算在处理同一个问题的时候,可能是时间先后的问题,两个给出了不同的,差异点就是在有没有初始化hidden上。上面的。

6.nn.Embeddings

 https://pytorch.org/docs/stable/nn.html

原来第一个维度是嵌入的个数,第二个是维度,第一个理解起来就是vocab的大小是多少,一共有多少单词需要建立embedding。

import torch
import torch.nn as nn
embedding = nn.Embedding(10, 3)
input = torch.LongTensor([[1,2,4,5],[4,3,2,9]])
print(embedding(input))

#输出:
tensor([[[ 0.0836,  0.8841,  1.0482],
         [-0.5619, -0.1675,  0.4611],
         [ 0.3298,  0.2257, -0.5489],
         [ 1.3400, -0.2116,  0.0309]],

        [[ 0.3298,  0.2257, -0.5489],
         [ 0.1834, -1.0833,  0.4628],
         [-0.5619, -0.1675,  0.4611],
         [ 2.6498, -1.2940,  1.0904]]], grad_fn=<EmbeddingBackward>)

有一点小小的疑问,就是不是说输入10个??那么input中给了6个,所以就很emmm。那两个呢?

当我在上面的地方加上:

input2=torch.LongTensor([[11,12,14,15],[4,31,2,9]])
print(embedding(input2))

#果然报错:
RuntimeError: index out of range at c:aw1swindowspytorchatensrc	hgeneric/THTensorEvenMoreMath.cpp:191
#就是word太多,vocab下标越界了。

但我如果换成这个样子:

不对不对,之前我理解错了,就是index超标了,超过了10,0-9,不能出现10以上的。

input2=torch.LongTensor([[1,2,0,6],[7,8,2,9]])
print(embedding(input2))

变成上面代码的话,就非常地正常了。原来是这样啊。

2020-5-12周二更新————————

6.1这里词向量是否是可以更新的?

https://pytorch.org/docs/stable/nn.html

我跑了上面的例子代码

a=embedding.weight

#输出:
>>> a
Parameter containing:
tensor([[ 0.0288,  0.8227, -1.0783],
        [-1.1472, -1.0256, -0.0144],
        [-0.2304,  1.2761,  0.4757],
        [ 1.0669, -0.5264,  1.5879],
        [-1.5114, -0.1351, -1.5455],
        [-0.1970, -1.1633,  0.1477],
        [-1.1048, -0.0703, -0.6963],
        [-0.7295, -0.3831, -1.1680],
        [ 0.1752, -0.1280,  1.3552],
        [ 0.1582,  0.3204, -0.3480]], requires_grad=True)

我们可以看到,这里a是requires_grad=True,所以在训练的过程中,词向量是有个学习的过程的,也就是微调的过程吧,默认是更新的。

如果想要固定住的话,可以手动地设置:

>>> embedding.weight.requires_grad=False
>>> embedding.weight.requires_grad
False

之前的方法,这个Variable对象,默认求导是False的。

import torch
from torch.autograd import Variable
autograd_tensor = torch.randn((2, 3, 4))

#输出:
>>> autograd_tensor.requires_grad
False

7.torch.mm

矩阵相乘,结果非常简单,输入参数非常简单。

8.nlp教程第一篇实现:A Neural Probabilistic Language Model

https://zhuanlan.zhihu.com/p/21101055

其他讲解的博客说,最后一层softmax的计算量非常大。那么由此就改进了层次softmax等,这个我还从来都不知道,所以需要学习一下这方面的。

想一下它的计算公式,如果词表大的话,大到几万,那么分母的计算可是非常吓人的啊。

9.softmax的改进

https://blog.csdn.net/qunnie_yi/article/details/80128024

分层softmax,分片softmax,CNN-Softmax等。

 这个图非常有意思,各种softmax近似计算方法比较。原来softmax还有这么多替换的方法啊!

但是我还是有一个疑问,重采样到底是什么。。。 

原文地址:https://www.cnblogs.com/BlueBlueSea/p/12343656.html