theano - 伯努利理论

标签 theano

我有关于伯努利掩模的问题。

据我了解,掩码应该取决于速率(概率)p。 (例如,如果 p= 0.5 并且掩码是大小=2 的数组 A,则掩码应类似于:[0,1] 或 [1,0])。 大多数 theano 代码都使用伯努利,例如:

rs = np.random.RandomState(1234)

rng = theano.tensor.shared_randomstreams.RandomStreams(rs.randint(999999))

mask = rng.binomial(n=1, p=(0.5), size=A.shape)

但是当我测试这个时,我发现掩码也可以是 [0,0] 或 [1,1],这对我来说似乎不符合逻辑。因为我想随机地将数组的一半设置为零。 也许有一个错误吗?或者也许 theano 为此目的提供了一种替代方案。 预先感谢您!

最佳答案

rng.binomial(n=1, p=0.5, shape=A.shape)将为结果张量的每个元素独立地从伯努利分布中采样,形状为 A.shape 。由于每个样本都是独立的,因此结果张量的每个元素将以 0.5 的概率为零,以 0.5 的概率为 1。因此,如果结果张量的形状应为 (2, ) (即长度为 2 的向量),有四种可能的结果,每种结果的概率为 0.25:

[0, 0]
[0, 1]
[1, 0]
[1, 1]

目前尚不清楚您的用例是什么,但如果是用于去噪自动编码器,则这是通常的方法;有时你会比其他时候放弃更多的功能。丢弃所有特征是相当极端的,但当结果张量的大小远大于 2 时,这是不太可能的结果。

如果您确实需要屏蔽一半的元素,那么您可以使用 theano.tensor.raw_random.shuffle_row_elements 。我没有尝试过这个,但想法是使用 shuffle_row_elements 象征性地对索引列表进行洗牌。 ,选择结果列表的前半部分,然后使用 set_subtensor仅屏蔽原始张量中选定索引处的那些元素。

关于theano - 伯努利理论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31971462/

相关文章:

gpu - 将 GPU 用作视频卡和 GPGPU

tensorflow - 关于使用 Keras 在 VGG16 中构建第一个输入层

python - NeuPy:输入形状问题

python - Tensorflow 中 Theano 的 Theano.tensor.ivector 的等价性

python - 在 theano 中动态创建符号表达式

python - 在 python 中使用这段代码有什么好处? (先设置 i = [0],然后设置 i[0] += size)

python - Theano 属性错误: 'module' object has no attribute 'tests'

python - Keras中这两种添加神经网络层的方式有什么区别?

machine-learning - 在 Keras 中多次调用 "fit"

tensorflow - 不可训练参数的定义是什么?