下面是一个小代码,我正试图计算softmax。它适用于单个阵列。但是如果数量更大,比如1000等,就会爆炸
import numpy as np
def softmax(x):
print (x.shape)
softmax1 = np.exp(x)/np.sum(np.exp(x))
return softmax1
def test_softmax():
print "Running your code"
#print softmax(np.array([1,2]))
test1 = softmax(np.array([1,2]))
ans1 = np.array([0.26894142, 0.73105858])
assert np.allclose(test1, ans1, rtol=1e-05, atol=1e-06)
print ("Softmax values %s" % test1)
test2 = softmax(np.array([[1001,1002],[3,4]]))
print test2
ans2 = np.array([
[0.26894142, 0.73105858],
[0.26894142, 0.73105858]])
assert np.allclose(test2, ans2, rtol=1e-05, atol=1e-06)
if __name__ == "__main__":
test_softmax()
我收到一个错误 运行时警告: 在 exp 中遇到溢出 运行你的代码 softmax1 = np.exp(x)/np.sum(np.exp(x))
softmax 的典型实现首先去除了最大值来解决此问题:
def softmax(x, axis=-1):
# save typing...
kw = dict(axis=axis, keepdims=True)
# make every value 0 or below, as exp(0) won't overflow
xrel = x - x.max(**kw)
# if you wanted better handling of small exponents, you could do something like this
# to try and make the values as large as possible without overflowing, The 0.9
# is a fudge factor to try and ignore rounding errors
#
# xrel += np.log(np.finfo(float).max / x.shape[axis]) * 0.9
exp_xrel = np.exp(xrel)
return exp_xrel / exp_xrel.sum(**kw)
从代数上讲,这是完全相同的,但这确保了传递到 exp
中的最大值为 1
。
问题内容: 我正在通过执行Java 并将其输出捕获到标准输出来用Java编写视频应用程序。我决定使用Apache Commons- Exec而不是Java的Java ,因为它看起来更好。但是,我很难捕获所有输出。 我认为使用管道将是可行的方法,因为它是进程间通信的标准方法。但是,我的设置使用和是错误的。它似乎有效,但仅适用于流的前1042个字节,奇怪的是恰好是的值。 我不喜欢使用管道,但是我想避免
我试图找到大数的阶乘 我输入t个测试用例 每种情况下都有一个数字,我试图找到它的阶乘 我将阶乘的数字存储在向量中(动态数组) 每次乘以递减的n值 功能显示:显示矢量v中的所有数字 n=5的输出
常见的变量输出有如下情况: 1.在控制器中按如下方式赋值 $this->assign('hello','Hello ThinkCMF!'); return $this->fetch(); 在模板中: <div>{$hello}</div> 2.在控制器中赋值数组变量 $data = ['hello'=>'Hello ThinkCMF!','username'=>'老猫']; $this->as
请参考:http://www.kancloud.cn/manual/thinkphp/1794
变量输出 常见的变量输出有如下情况: 1.在控制器中按如下方式赋值 $this->assign('hello','Hello ThinkCMF!'); return $this->fetch(); 在模板中: <div>{$hello}</div> 2.在控制器中赋值数组变量 $data = ['hello'=>'Hello ThinkCMF!','username'=>'老猫']; $thi
在模板中输出变量的方法很简单,例如,在控制器的方法中我们给模板变量赋值: $this->assign('name', 'thinkphp'); return $this->fetch(); 然后就可以在模板中使用: Hello,{$name}! 模板编译后的结果就是: Hello,<?php echo htmlentities($name);?>! 这样,运行的时候就会在模板中显示: Hello,