在实现一个神经网络项目落地代码,使用matlab训练完后,为了配合其他问题,使用python进行落地,实现DNN的正向计算,在网上看了一大堆softmax函数的实现,发现所有人都是单样本去计算或者循环去计算矩阵,心里默默吐槽,怎么都是这样写,就不能来个正常的例子,一行行这样算都提高不了效率。看来ctrl+c是解决不了问题了,还是自己动手来吧。
首先看下softmax函数公式:
不多说,直接上代码:
#一列一个样本
def softmax_0(x):
e = np.exp(x)
#对列求和
x_sum = np.sum(e,axis=0)[np.newaxis,:]
b = np.tile(x_sum,(np.shape(x)[0],1))
ret = e/b
return ret
#一行一个样本
def softmax_1(x):
e = np.exp(x)
#对行求和
x_sum = np.sum(e,axis=1)[:, np.newaxis]
b = np.tile(x_sum,(1,np.shape(x)[1]))
ret = e/b
return ret
x1 = np.random.rand(4,2)
y1 = softmax_0(x1)
x2 = np.random.rand(2,4)
y2 = softmax_1(x2)
本人习惯一列一个样本,但可能不同人不同习惯,根据个人喜好吧,一行一个样本和一列一个样本都实现了,可直接使用。
祝大家劳动节快乐!!收工。