softmax的代码python实现和tensorflow框架的python版本softmax()深度解析

softmax的数学公式我就不说了,百度百科有。
我们必须知道的是,softmax必须对多个数据使用才有意思,对一个数据使用时没意义的。
举个例子:
求数组[0,1,2,3,4,5,6,7,8,9]的softmax变换后的各数组元素对应值:
代码:
import numpy as np
_all=0
for i in range(10):
_all=_all+np.ei
#print(i)
for i in range(10):
print((np.e
i)/_all)
输出结果:
7.801341612780746e-05
0.00021206245143623285
0.0005764455082375904
0.001566941350139081
0.004259388198344146
0.011578217539911803
0.03147285834468804
0.08555209892803113
0.23255471590259755
0.6321492583604866
上诉代码是我自己实现的,下面我们用tensorflow的softmax函数求数组[0,1,2,3,4,5,6,7,8,9]的softmax变换后的值。
代码:
import tensorflow as tf

d=tf.Variable([0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0])
op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(op)
soft1=tf.nn.softmax(d)
print(sess.run(soft1))
print((sess.run(soft1)).sum())
输出结果:
[7.8013414e-05 2.1206246e-04 5.7644554e-04 1.5669415e-03 4.2593884e-03
1.1578218e-02 3.1472858e-02 8.5552104e-02 2.3255473e-01 6.3214928e-01]
1.0
可见跟我手写的代码的结果是一样的,我们还验证了一下各项相加的和,结果肯定为1
值得注意的是,tensorflow的softmax函数必须作用于浮点数,传入整数数组会报错,如果传入的是矩阵(二维数组),softmax()对每一行执行softmax操作:
看代码:
import tensorflow as tf

d=tf.Variable([0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0])
e=tf.Variable([0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0])
f=tf.Variable([[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0],[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0]])

op = tf.global_variables_initializer()

with tf.Session() as sess:
sess.run(op)
soft1=tf.nn.softmax(d)
soft2=tf.nn.softmax(e)
soft3=tf.nn.softmax(f)
print(sess.run(soft1))
print(sess.run(soft2))
print(sess.run(soft3))
print(type(sess.run(soft3)))
print((sess.run(soft1)).sum())
print((sess.run(soft2)).sum())
print((sess.run(soft3)).sum())
print((sess.run(soft3))[0].sum())
print((sess.run(soft3))[1].sum())
输出结果:
[7.8013414e-05 2.1206246e-04 5.7644554e-04 1.5669415e-03 4.2593884e-03
1.1578218e-02 3.1472858e-02 8.5552104e-02 2.3255473e-01 6.3214928e-01]
[0.08533674 0.08533674 0.08533674 0.08533674 0.08533674 0.08533674
0.08533674 0.08533674 0.08533674 0.23196931]
[[7.8013414e-05 2.1206246e-04 5.7644554e-04 1.5669415e-03 4.2593884e-03
1.1578218e-02 3.1472858e-02 8.5552104e-02 2.3255473e-01 6.3214928e-01]
[8.5336745e-02 8.5336745e-02 8.5336745e-02 8.5336745e-02 8.5336745e-02
8.5336745e-02 8.5336745e-02 8.5336745e-02 8.5336745e-02 2.3196931e-01]]
<class ‘numpy.ndarray’>
1.0
1.0
2.0
1.0
1.0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值