矩阵的乘法比较简单,对应元素分别相乘即可,比如:
a1=np.array([1,2])
a2=np.array([3,5])
a3=np.array([[1,2],[3,4]])
[[1,2],
[3,4]]
a4=np.array([[2,3],[5,6]])
[[2,3],
[5,6]]
乘法运算
a1*a2
array([ 3, 10])
a3*a4
array([[ 2, 6],
[15, 24]])
a1*a4
array([[ 2, 6],
[ 5, 12]])
一般来说矩阵的乘积(也叫点积)使用的比较多,矩阵的乘积在神经网络里面非常常见且很重要,所以数组的相关属性需要非常熟悉,比如形状(shape),维度(ndim)等
两个数组能否做点积运算,需要查看形状对应维度的元素个数是否一致,不一致就会报错,比如2x3的形状和3x2的形状的数组就可以进行乘积运算,因为第一个矩阵的列和第二个矩阵的行的数量是一样的,点积之后的形状取决于第一个矩阵的行和第二个矩阵的列,具体点积的结果如下图:
只要符合上述条件,矩阵和一维数组(广播效果)也是可以进行点积的运算!
附带softmax函数简单介绍下,比如获取一个输出神经元的值的公式,其中分子是它的指数函数,分母是指数函数的和
因为指数函数值很大,很容易就发生溢出,经过变换(分子分母乘以一个常数)之后的第二个公式,可以防止溢出的发生
softmax函数的值区间是在0到1,还有一个特点就是输出的和的值是1,所以可以作为概率来使用
其中上述代码有map和list的转换,如果没有的话,因为输出是数组不能直接格式化,会报类型错误,需要map进行映射再做类型转换
print('概率:'+'{:.2%}'.format(softmax(dog)))
TypeError: unsupported format string passed to numpy.ndarray.__format__
map函数是map(func, *iterables),通过第一个参数的函数来进行迭代处理,如:
def m(x):
return x+100
print(list(map(m,[22,3,50])))
[122, 103, 150]
也可以使用lambda表达式来表示匿名函数:
print(list(map(lambda x:x+100,[22,3,50])))
[122, 103, 150]