继续关于深度学习的学习。深度学习这个机器学习领域,简直就是一堆堆数学概念和知识的具象版。所以不接触一丢丢数学基本概念和知识,简直就是空中楼阁。而不管是numpy科学计算库,还是Pytorch框架,很多都内置了一些数学概念函数。我们可以借此了解。比如点积这个常见的概念。
在以前的文章里,我们简单聊过一点。点积这个数学概念用的比较广泛,可以说在机器学习科学计算的一些计算机领域是基础中的基础。所以不仅在numpy基础软件库里有,在Pytorch这样的深度学习框架里也有内置。也就是numpy矩阵和Pytorch中的dot()函数方法。
这个东西描述起来似乎有点拗口,比如在numpy的矩阵中,两个进行点积操作的矩阵比如a和b的形状的行列必须对应(不是说a行等b行,b列等b列,两者必须相等),要对a和b两个矩阵做点积操作,则要a的每一行的对应元素乘以b的每一列的对应元素,然后想加,并存入新的矩阵。这个描述不严谨,不过用例子说明就直观多了。
这里用numpy创建了ma和mb两个矩阵。注意这两个矩阵的形状是有讲究的。ma形状是2*3,那么mb就必须是3*几的形状。而点积操作后存入的新矩阵里,第一个操作后的27数字,则是2*1+3*3+4*4得来了。同样,第二个36的数字,则是2*2+3*4+4*5得到的。同理其他数字也是相应得来的。
而到了Pytorch中的Tensor,点积还是点积,dot还是dot,不过操作就有点不一样了。虽然numpy中和Pytorch中都是a.dot(b)这样的形式,不过操作表现并不太一样。比如如果我们在Pytorch中创建两个Tensor。比如x = torch.randn(3,4),y = torch.randn(4,3),想要print(x.dot(y))的话,系统会报错的。
在Tensor中,要求是1D tensors,而我们创建了torch.randn(3,4)和torch.randn(4,3)显然不符合要求。所以这里无法进行dot操作。
而只有我们创建了两个都是1D的Tensors后,才能进行点积dot操作。比如我们把两个都创建成a=torch.randn(3)和b=torch.randn(3)后才能进行a和b的点积操作。关于dot先介绍这些。
怎么样,是不是有点晕?看起来是不是特别繁琐?的确很繁琐,很容易让人觉得枯燥无聊。好在,谢天谢地,这些繁琐的数学计算,Python库就帮我们自动做了。而以后接触神经网络的过程中,我们会发现有很多类似这样的数学概念和繁琐计算。有些计算机在底层帮我们自动完成了,有些还要我们灵活掌握。
领取专属 10元无门槛券
私享最新 技术干货