【发布时间】:2018-04-11 06:27:05
【问题描述】:
我不明白 numpy 中使用的伯努利随机数生成器是如何计算的,希望得到一些解释。例如:
np.random.binomial(size=3, n=1, p= 0.5)
Results:
[1 0 0]
n = 路径数
p = 发生概率
大小 = 实验次数
如何确定“0”或“1”的生成数字/结果?
==================================更新============ ======================
我创建了一个受限玻尔兹曼机,尽管它在多次代码执行中是“随机的”,但它始终呈现相同的结果。随机化是使用播种的
np.random.seed(10)
import numpy as np
np.random.seed(10)
def sigmoid(u):
return 1/(1+np.exp(-u))
def gibbs_vhv(W, hbias, vbias, x):
f_s = sigmoid(np.dot(x, W) + hbias)
h_sample = np.random.binomial(size=f_s.shape, n=1, p=f_s)
f_u = sigmoid(np.dot(h_sample, W.transpose())+vbias)
v_sample = np.random.binomial(size=f_u.shape, n=1, p=f_u)
return [f_s, h_sample, f_u, v_sample]
def reconstruction_error(f_u, x):
cross_entropy = -np.mean(
np.sum(
x * np.log(sigmoid(f_u)) + (1 - x) * np.log(1 - sigmoid(f_u)),
axis=1))
return cross_entropy
X = np.array([[1, 0, 0, 0]])
#Weight to hidden
W = np.array([[-3.85, 10.14, 1.16],
[6.69, 2.84, -7.73],
[1.37, 10.76, -3.98],
[-6.18, -5.89, 8.29]])
hbias = np.array([1.04, -4.48, 2.50]) #<= 3 bias for 3 neuron in hidden
vbias = np.array([-6.33, -1.68, -1.25, 3.45]) #<= 4 bias for 4 neuron in input
k = 2
v_sample = X
for i in range(k):
[f_s, h_sample, f_u, v_sample] = gibbs_vhv(W, hbias, vbias, v_sample)
start = v_sample
if i < 2:
print('f_s:', f_s)
print('h_sample:', h_sample)
print('f_u:', f_u)
print('v_sample:', v_sample)
print(v_sample)
print('iter:', i, ' h:', h_sample, ' x:', v_sample, ' entropy:%.3f'%reconstruction_error(f_u, v_sample))
结果:
[[1 0 0 0]]
f_s: [[ 0.05678618 0.99652957 0.97491304]]
h_sample: [[0 1 1]]
f_u: [[ 0.99310473 0.00139984 0.99604968 0.99712837]]
v_sample: [[1 0 1 1]]
[[1 0 1 1]]
iter: 0 h: [[0 1 1]] x: [[1 0 1 1]] entropy:1.637
f_s: [[ 4.90301318e-04 9.99973278e-01 9.99654440e-01]]
h_sample: [[0 1 1]]
f_u: [[ 0.99310473 0.00139984 0.99604968 0.99712837]]
v_sample: [[1 0 1 1]]
[[1 0 1 1]]
iter: 1 h: [[0 1 1]] x: [[1 0 1 1]] entropy:1.637
【问题讨论】:
-
我不明白这个问题。请您改写/详细说明一下吗?
-
@kazemakase 当我使用函数
np.random.binomial(size=3, n=1, p= 0.5)时,我得到了结果[1 0 0]。但是,我不明白 numpy 是如何得到呈现结果的,并希望得到解释。 -
您是在问生成数字的算法是如何工作的,或者结果与输入参数的关系如何?
-
我在问算法是如何产生数字的。
-
随着更新,这实际上是一个新问题。您应该考虑将此作为一个单独的问题提出,除非您想使现有答案无效......进一步提示:显示 all 相关代码。输出指示迭代,但您的代码中没有迭代的迹象。看到在同一上下文中提到的 seed、iter 和 same result 这三个词让我的脑海里响起了警报:)(重新播种在循环?)。因此,请准确说明您是如何重复调用
binomial函数的,以及播种发生的确切位置。
标签: numpy statistics