作为我研究的一部分,我从对数正态分布中测量绘制的均值和标准差.给定基础正态分布的值,应该可以分析预测这些量(如https://en.wikipedia.org/wiki/Log-normal_distribution所示).
但是,如下图所示,情况似乎并非如此.第一个图显示对数正态数据相对于高斯西格玛的平均值,而第二个图显示对数正态数据的西格玛与高斯的西格玛.显然,"计算"线非常显着地偏离"分析"线.
我将高斯分布的均值与sigma相关联,mu = -0.5*sigma**2因为这确保了对数正态场应该具有1的均值.注意,这是由我工作的物理领域的动机:与分析值的偏差仍然如果设置mu=0.0为例,则会发生.
通过复制和粘贴问题底部的代码,应该可以重现下面的图表.任何关于可能导致这种情况的建议都将不胜感激!
注意,为了生成上面的图,我使用了N=10000,但是N=1000为了速度已经输入了下面的代码.
import numpy as np
import matplotlib.pyplot as plt
mean_calc = []
sigma_calc = []
mean_analytic = []
sigma_analytic = []
ss = np.linspace(1.0,10.0,46)
N = 1000
for s in ss:
mu = -0.5*s*s
ln = np.random.lognormal(mean=mu, sigma=s, size=(N,N))
mean_calc += [np.average(ln)]
sigma_calc += [np.std(ln)]
mean_analytic += [np.exp(mu+0.5*s*s)]
sigma_analytic += [np.sqrt((np.exp(s**2)-1)*(np.exp(2*mu + s*s)))]
plt.loglog(ss,mean_calc,label='calculated')
plt.loglog(ss,mean_analytic,label='analytic')
plt.legend();plt.grid()
plt.xlabel(r'$\sigma_G$')
plt.ylabel(r'$\mu_{LN}$')
plt.show()
plt.loglog(ss,sigma_calc,label='calculated') …Run Code Online (Sandbox Code Playgroud) 我用于tensorflow.keras在图像识别问题中训练 CNN,使用 Adam 最小化器来最小化自定义损失(一些代码位于问题的底部)。我正在试验我的训练集中需要使用多少数据,并认为我应该研究我的每个模型是否已正确收敛。然而,当绘制损失与不同训练集分数的训练时期数的关系时,我注意到损失函数中大约存在周期性尖峰,如下图所示。在这里,不同的线显示了不同的训练集大小作为我的总数据集的一部分。
当我减小训练集的大小(蓝色 -> 橙色 -> 绿色)时,这些尖峰的频率似乎减少,但幅度似乎增加。直觉上,我会将这种行为与跳出局部最小值的最小化器联系起来,但我对 TensorFlow/CNN 的经验还不够,不知道这是否是解释这种行为的正确方法。同样,我不太理解训练集大小的变化。
谁能帮助我理解这种行为?我应该关注这些功能吗?
from quasarnet.models import QuasarNET, custom_loss
from tensorflow.keras.optimizers import Adam
...
model = QuasarNET(
X[0,:,None].shape,
nlines=len(args.lines)+len(args.lines_bal)
)
loss = []
for i in args.lines:
loss.append(custom_loss)
for i in args.lines_bal:
loss.append(custom_loss)
adam = Adam(decay=0.)
model.compile(optimizer=adam, loss=loss, metrics=[])
box, sample_weight = io.objective(z,Y,bal,lines=args.lines,
lines_bal=args.lines_bal)
print( "starting fit")
history = model.fit(X[:,:,None], box,
epochs = args.epochs,
batch_size = 256,
sample_weight = sample_weight)
Run Code Online (Sandbox Code Playgroud) python machine-learning conv-neural-network keras tensorflow