我必须使用芹菜来并行化随机梯度下降算法,尽管这可能不是用芹菜做的更好的选择,这仍然是我的问题=)
该算法看起来像那样,其中数据是样本矩阵:
#Random init of the minimum:
x_current = np.random.random(n_dim)
for i in range(max_iter):
#Randomizes the lines, i.e. the samples of the minibatches at each iteration
np.random.shuffle(datas)
#I update my gradient by minibatches of n samples
for batch in range(datas.shape[0] / n)
delta = gradient(x_current, datas[(batch*n):(batch*(n+1)),:])
x_current += delta
gradient是要作为任务分发的函数。假设我有10名工人,起初,我使用10个第一个小批量创建10个任务梯度。
当有人完成时,我希望使用下一个小批量创建一个新任务(如果迭代更改并返回到第一个小批量并不重要)和当前版本的x_current(无关紧要)如果它不是最后一个版本。)
另外,我必须得到结果并更新x_current并返回delta。所有增量都必须在x_current上“顺序”应用(但顺序无关紧要),并且与任务创建异步。
我的问题是,用芹菜做最优雅的方式是什么? 谢谢:))