python – 使用numpy.random.multinomial时如何避免值错误?
作者:互联网
当我使用这个随机发生器时:numpy.random.multinomial
,我一直得到:
ValueError: sum(pvals[:-1]) > 1.0
我总是传递这个softmax函数的输出:
def softmax(w, t = 1.0):
e = numpy.exp(numpy.array(w) / t)
dist = e / np.sum(e)
return dist
除了我现在得到这个错误,我还为参数(pvals)添加了这个:
while numpy.sum(pvals) > 1:
pvals /= (1+1e-5)
但这并没有解决它.确保我避免此错误的正确方法是什么?
编辑:这是包含此代码的函数
def get_MDN_prediction(vec):
coeffs = vec[::3]
means = vec[1::3]
stds = np.log(1+np.exp(vec[2::3]))
stds = np.maximum(stds, min_std)
coe = softmax(coeffs)
while np.sum(coe) > 1-1e-9:
coe /= (1+1e-5)
coeff = unhot(np.random.multinomial(1, coe))
return np.random.normal(means[coeff], stds[coeff])
解决方法:
我在语言建模工作中也遇到过这个问题.
这个问题的根源来自numpy的隐式数据转换:我的sorfmax()的输出是float32类型,但是,numpy.random.multinomial()会将pval转换为float64类型IMPLICITLY.由于数字舍入,此数据类型转换会导致pval.sum()有时超过1.0.
此问题已得到认可并发布here
标签:python,random,numpy,numerical-stability 来源: https://codeday.me/bug/20190517/1119907.html