gpt4 book ai didi

machine-learning - 吉布斯抽样给出的概率很小

转载 作者:行者123 更新时间:2023-11-30 09:52:24 27 4
gpt4 key购买 nike

作为我们最终设计项目的一部分,我们必须设计一个吉布斯采样器来对图像进行降噪。我们选择使用 Metropolis 算法而不是常规的吉布斯采样器。该算法的粗略草图如下,所有像素都是0-255灰度值。此外,我们使用简单的平滑先验分布。

main()
get input image as img
originalImg = img
for k = 1 to 1000
beta = 3/log(1+k)
initialEnergy = energy(img,originalImg)
for i = 0 to imageRows
for j = 0 to imageCols
img[i][j] = metropolisSample(beta,originalImg,img,initialEnergy,i,j)


energy(img,originalImg)
for i = 1 to imageRows
for j = 1 to imageCols
ans += (img[i][j] - originalImg[i][j])^2 / (255*255)
ans += (img[i][j] - image[i][j+1])^2 / (255*255)
ans += (img[i][j] - image[i][j-1])^2 / (255*255)
ans += (img[i][j] - image[i+1][j])^2 / (255*255)
ans += (img[i][j] - image[i-1][j])^2 / (255*255)
return ans


metropolisSample(beta,originalImg,img,initialEnergy,i,j)
imageCopy = img
imageCopy[i][j] = random int between 0 and 255
newEnergy = energy(imageCopy,originalImg)
if (newEnergy < initialEnergy)
initialEnergy = newEnergy
return imageCopy[i][j]
else
rand = random float between 0 and 1
prob = exp(-(1/beta) * (newEnergy - initialEnergy))
if rand < prob
initialEnergy = newEnergy
return imageCopy[i][j]
else
return img[i][j]

这就是该计划的要点。我的问题是在计算概率的步骤中

prob = exp(-(1/beta) * (newEnergy - initialEnergy))

能量差异如此之大,以至于概率几乎总是为零。缓解这种情况的正确方法是什么?我们也尝试过吉布斯采样方法,但遇到了类似的问题。 Gibbs采样器代码如下。我们不使用 MetropolisSample,而是使用 gibbsSample

gibbsSample(beta,originalImg,img,initialEnergy,i,j)
imageCopy = img
sum = 0
for k = 0 to 255
imageCopy[i][j] = k
energies[k] = energy(imageCopy,originalImg)
prob[k] = exp(-(1/beta) * energies[k])
sum += prob[k]

for k = 0 to 255
prob[k] / sum

for k = 1 to 255
prob[k] = prob[k-1] + prob[k] //Convert our PDF to a CDF

rand = random float between 0 and 1
k = 0
while (1)
if (rand < prob[k])
break
k++
initialEnergy = energy[k]
return k

我们在实现过程中也遇到了类似的问题。当我们计算时

prob[k] = exp(-(1/beta) * energies[k])

我们的能量如此之大,以至于我们的概率都为零。从理论上讲,这不应该是一个问题,因为我们将它们全部相加,然后除以总和,但浮点表示不够准确。解决这个问题的好方法是什么?

最佳答案

我对你的具体问题一无所知,但我的第一 react 是扩展能量。你的像素在 0..255 的范围内,这是任意的。如果像素是 0 到 1 之间的分数,则会得到截然不同的结果。

如果能量单位是像素^2,请尝试将能量除以256^2。否则,尝试除以 256。

此外,鉴于数据是完全随机的,因此可能存在非常高的能量,但实际上概率不应该很高。

我对您的问题缺乏了解,可能导致我的回答毫无用处。如果是这样,请忽略它。

关于machine-learning - 吉布斯抽样给出的概率很小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788421/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com