python grab,python grabcut
我试图用计算机编程语言实现阿达格拉德。为了便于学习,我以矩阵分解为例。我会用亲笔签名来计算梯度。在
我的主要问题是执行是否良好。在
问题描述
给定一个矩阵答(mxn)有一些缺失项,分解成W和h,分别有大小(mxk)和(kxn)。目标是使用阿达格拉德学习W和h。对于亲笔签名实现,我将遵循这本指南。在
注意:我非常清楚基于进场与着陆模拟器;肌萎缩侧索硬化的实现非常适合。我使用阿达格拉德只是为了学习目的
习惯进口将亲笔签名. numpy作为铭牌导入
进口熊猫作为螺纹中径
创建要分解的矩阵
^{pr2}$
屏蔽一个条目A[0,0]=np .圆盘烤饼
定义成本函数定义成本(宽,高):
pred=np.dot(W,H)
mask=~np.isnan(A)
返回NP。sqrt((pred-A)[mask].flatten() ** 2).平均值(轴=无))
分解参数等级=2
学习率=0.01
n_steps=10000
成本梯度与参数W和来自亲笔签名的进口毕业生
grad_cost=multigrad(cost,argnums=[0,1])
阿达格拉德主程序(需要检查形状=形状
# W和H的首字母
H=np.abs(np.random.randn(秩,形状[1])
w=NP。ABS(NP。随机的。randn(shape[0],秩))
# gt_w和gt_h包含梯度和的累加
gt_w=np.zeros_like(W)
gt_h=np.zeros_like(H)
#稳定系数
eps=1e-8
打印迭代,成本
对于范围内的I(n _ steps):
如果i00==0:
打印 **20
打印我,,,成本(宽,高)
#计算机毕业生wrt W和H
del_W,del_H=梯度成本(宽,高)
#添加渐变正方形
gt_w=np.square(del_W)
gt_h=np.square(德尔_h)
#修改后的学习率
mod _ learning _ rate _ W=NP。divide(learning _ rate,np.sqrt(gt_w eps))
mod _ learning _ rate _ H=NP。divide(learning _ rate,np.sqrt(gt_h eps))
W=W-del_W*mod_learning_rate_W
H=H-del_H*mod_learning_rate_H
当问题收敛,我得到了一个合理的解决方案,我想知道实现是否正确。具体来说,对梯度和的理解,然后计算自适应学习率是否正确?在
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。