矩阵的乘法、乘积(点积)和softmax函数的溢出

矩阵的乘法比较简单,对应元素分别相乘即可,比如:

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函数简单介绍下,比如获取一个输出神经元的值的公式,其中分子是它的指数函数,分母是指数函数的和

y_{k}=\frac{exp(a_{k})}{\sum_{i=1}^{n}exp(a_{i})} \Rightarrow y_{k}=\frac{exp(a_{k}+C)}{\sum_{i=1}^{n}exp(a_{i}+C)}

因为指数函数值很大,很容易就发生溢出,经过变换(分子分母乘以一个常数)之后的第二个公式,可以防止溢出的发生

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅恪光潜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值