对于softmax函数,在单独提取和使用它时,意外出现了很多错误,所以我们测试并比较一下在网上找到的几个编程代码。 一维时对于一维向量很简单,可以直接使用以下编程代码。
考虑到defsoftmax(x ) :e_x=NP.exp(x-NP.max ) x ) ) returne_x/e_x.sum ) axis=0)二维阵列的情况
第一个defsoftmax2_1(x ) : print (初始(n (,x ) print )、x.x.ndim ) if x.ndim==2: x=x.T print ) ) ) axis=0) print (进行溢出防止操作后的(n (,x ) y=np.exp(x ) x )/NP.sum (NP.exp ) x ),axis=0) print )最终结果33660
x2=NP.array ([ 1.0,2.2,3.3 ] ) )。
x3=NP.array ([ 1.0,2.2,3.3 ] ) ) ) )。
x4=NP.Array([1.0]、[2.2]、[3.3]] )
实际上,不能进行这样的输入。 因为这不是多分类任务,所以这里只有测试代码
第二个defsoftmax2_2(x ) : print (初始(n (,x ) print ),x.ndim ) temp=NP.max(x,axis=1) #prinnnt 1) x=x
x1=NP.Array([1.3.3,2.5 ],[ 2.1,3.2,5.3 ] ) )
x2=NP.array ([ 1.0,2.2,3.3 ] )执行错误: numpy.axis error : axis1isoutofboundsforarrayofdimension 1
x3=NP.array ([ 1.0,2.2,3.3 ] ) ) ) )。
x4=NP.Array([1.0]、[2.2]、[3.3]] )
第三个是错误的代码:
defsoftmax2_3(x ) : print (初始: (n ),x ) print )、x.x.ndim (max=NP.max (x ) x,axis=1) print ) ) max.shape(y=x-maxreturnNP.exp ) y )/NP.sum ) NP.exp ) y,axis=1) x1=NP.array([[1.3.3,2.5 ] )
执行错误: value error : operandscouldnotbebroadcasttogetherwithshapes (2,3 ) ) 2,
通常,将x为n行m列的矩阵作为输入,取每列的最大值的矩阵为(n,)的两者不能进行矩阵的运算。
注: Numpy在加减矩阵和向量时,首先要求矩阵的列数与向量的维数相等。 然后,将矩阵的各行与向量加减运算得出结果。 如下所示。
x=NP.array ([ 1,2,3 ]、[ 4,5,6 ]、[ 7,8,9 ]、[ 10,11,12 ] ) print(x ) x ) ) 4,3 [ 1,2,3 ] inmodulevalueerror : operandscouldnotbebroadcasttogetherwithshapes (4,3 ) ) 4,
参考链接:实现softmax函数代码的思考- CuriosityWang -博客圈(cnblogs.com)。
softmax函数实现-解析为什么使用矩阵倒置的方式_w199611027017博客-CSDN博客