首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深度学习中numpy矩阵和Pytorch张量中的点积dot

继续关于深度学习的学习。深度学习这个机器学习领域,简直就是一堆堆数学概念和知识的具象版。所以不接触一丢丢数学基本概念和知识,简直就是空中楼阁。而不管是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库就帮我们自动做了。而以后接触神经网络的过程中,我们会发现有很多类似这样的数学概念和繁琐计算。有些计算机在底层帮我们自动完成了,有些还要我们灵活掌握。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20211212A09TGE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券