繁体   English   中英

Python NumPy 数组和矩阵乘法

[英]Python NumPy Array and Matrix Multiplication

我正在阅读“制作自己的神经网络”一书,并按照示例来实现我的第一个神经网络。 我理解了基本概念,特别是这个方程,其中输出是通过输入和权重的矩阵点积来计算的:

X = W * I

其中 X 是应用 Sigmoid 之前的输出,W 是链接权重,I 是输入。

现在在书中,他们确实有一个函数,可以将这个输入作为一个数组,然后将该数组转换为二维数组。 我的理解是,X 的值是这样计算的,基于:

W = [0.1, 0.2, 0.3
     0.4, 0.5, 0.6
     0.7, 0.8, 0.9]

I = [1
     2
     3]

因此,如果我现在为 [1,2,3] 之类的输入传入一个数组,为什么我需要执行以下操作才能将其转换为本书中所做的二维数组:

inputs = numpy.array(inputs, ndmin=2).T

有任何想法吗?

您在此处输入的是一维列表(或一维数组):

I = [1, 2, 3]

这个一维数组背后的想法如下:如果这些数字表示花瓣的宽度(厘米)、长度和重量(以克为单位):您的花瓣将有1cm的宽度、 2cm的长度和一个重量3g

将输入I转换为二维数组对于两件事来说是必要的:

  • 首先,默认情况下,使用numpy.array(inputs)将此列表转换为 NumPy 数组将产生一个形状为 (3,) 的数组,第二维未定义。 通过设置ndmin=2 ,它强制维度为 (3, 1),这样就不会产生任何与 NumPy 相关的问题,例如在使用矩阵乘法等时。
  • 其次,也许更重要的是,正如我在评论中所说的那样,神经网络中的数据通常以这种方式存储在数组中,因为数组中的每一行都将代表一个不同的特征(因此每个特征都有一个唯一的列表) )。 换句话说,这只是一种传统的说法,你不会混淆苹果和梨(在这​​种情况下,长度和重量)

因此,当您执行inputs = numpy.array(inputs, ndmin=2).T ,您最终会得到:

array([[1],    # width
       [2],    # length
       [3]])   # weight

不是

array([1, 2, 3])

希望它使事情更清楚一些!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM