python 矩阵点乘 、 基于向量运算的 softmax实现
程序员文章站
2022-07-11 17:56:28
...
1、关于python中矩阵点乘(除)
只允许三种情况出现:
(1)两个矩阵维度相同,则对应元素相乘
(2)矩阵乘以一个向量:
a: 矩阵与行向量 相乘(mxn * 1*n 形式), 此时行向量长度 必须等于矩阵的列数
b:矩阵与列向量相乘(mxn * mx1 形式) 此时 矩阵的行数必须与列向量的行数相同
举例如下:
a = np.array([
[1, 2],
[4,5],
[7,8]
])
b = np.array([2,3])
print(a*b) #即 行向量 每个元素乘以 矩阵的对应列
c = np.array([2,3,4])
#print(a*c) 不可以 3X2 * 1x3
d = np.array([
[2],
[3],
[4]
])
print(a*d) # 即列向量的每个元素乘以对应行
e = [
[2,2],
[3,4],
[4,4]
]
print(a*e) # 即当矩阵维度相同时 对应元素相乘
2 、softmax向量化实现
import numpy as np
'''
(1) softmax(x) == softmax(x+c)
'''
def soft_max(x):
if(len(x.shape) > 1):
exp_minmax = lambda x:np.exp(x-np.max(x))
x = np.apply_along_axis(exp_minmax,1,x)
denom = lambda x:1.0/np.sum(x)
denominator = np.apply_along_axis(denom,1,x)
if(len(denominator.shape) == 1): # 转换为 n x 1 形式的矩阵
denominator = denominator.reshape((denominator.shape[0],1))
x = x*denominator
else:
x = np.exp(x-np.max(x))
denominator = 1.0/np.sum(x)
x = x.dot(denominator)
return x
一篇讲解交叉熵很好的文章 : https://blog.csdn.net/red_stone1/article/details/80735068
上一篇: C语言中的关键字:static
下一篇: 火锅调味料怎么配才会让食材变得更加美味