本周作业主要在于数学基础。依靠金融学里的指数移动加权平均(Exponentially Weighted Averages,EWA):V=betaV+(1-beta)dW(距离越近,EMA越大)设计了momentum和adam两种优化算法
但是作者在写代码作业发现一个有趣的点。初始化权值时,标准答案使用了np.random.seed(3),最终准确度是79,而不加seed的accuracy高达87。观察predicition代码:
def predict(X,Y,parameters):
m=Y.shape[1]
p=np.zeros((1,m))
A3,cache=forward_propagation(X,Y,parameters)
for i in range (1,m):
if A3[0,i]>0.5:
p[0,i]=1
else:
p[0,i]=0
# print ("predictions: " + str(p[0,:]))
# print ("true labels: " + str(Y[0,:]))
print('accuracy: '+str(np.mean(p[0,:]==Y[0,:])))
return p
用p与Y(实际标签)做平均。本质上跟预测值A3有关。根据A3的计算公式:
A3=sigmoid(W3W2W1*X+W3W2b1+W3b2+b3)
可以看出,seed的加入使得initialize_weight的W,b更加随机,离Y偏置大。
(具体原理目前为止,希望未来某天填补这个空白)