赞
踩
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。