【发布时间】:2018-01-15 09:05:48
【问题描述】:
我想知道如何生成一些随机数据,其图类似于“训练曲线”。训练曲线是指来自学习模型的一系列训练损失值。这些通常在开始时具有较大的值和方差,并且随着时间的推移收敛到具有非常小的方差的某个值。它看起来有点像嘈杂的指数曲线。
这是我最接近生成类似于训练曲线的随机数据的方法。问题是曲线不像真实损失曲线那样变平或收敛,并且在较平的部分有太多的方差。
import numpy as np
import matplotlib.pyplot as plt
num_iters = 2000
rand_curve = np.sort(np.random.exponential(size=num_iters))[::-1]
noise = np.random.normal(0, 0.2, num_iters)
signal = rand_curve + noise
noisy_curve = signal[signal > 0]
plt.plot(noisy_curve, c='r', label='random curve')
这是一个实际的训练损失曲线供参考。
我对概率分布知之甚少,不知道这是否是一个愚蠢的问题。我只想生成一条随机曲线,以便其他人可以使用数据数组来帮助我解决我在matplotlib 中遇到的关于对数图的另一个问题。
【问题讨论】:
-
实际上,你的曲线给我留下了深刻的印象......“实际”曲线可能代表了我用模拟退火之类的方法所做的工作,但我认为大多数算法都会已经杀死了迭代过程,直到它像那样平缓了这么久?
-
@roganjosh 哦,谢谢!我认为您对大多数算法在收敛后终止训练是正确的,但是我无法使用香草框架训练器来完成我的任务,因此这条曲线来自更天真的训练循环。使用简单的
pyplot.plot(loss)很难看到,但实际上它仍然非常轻微地减少,直到大约 1500 次迭代。使用对数 y 轴或 polyfit,您可以更好地看到这一点。