吴恩达深度学习第一课第二周作业编程题——follow实验并做出适当更正

博主【何宽】分享的【优质作业】已经非常完善了,我直接复制完整之后在自己的虚拟机上跑完全没问题,结果相同。只是对他分步演示的部分,在此提出其中一些需要注意的地方。

- 图片无法显示

plt.imshow()并不能让图片显示出来,还需要在后面加上plt.show()才会加载出那个index=25的猫的图片

- 错误提示:

在这里插入图片描述
propagate函数中存在缩进不一致问题,将propagate函数修改成以下形式即可

def propagate(w, b, X, Y):
    """
    实现前向和后向传播的成本函数及其梯度。
    参数:
        w  - 权重,大小不等的数组(num_px * num_px * 3,1)
        b  - 偏差,一个标量
        X  - 矩阵类型为(num_px * num_px * 3,训练数量)
        Y  - 真正的“标签”矢量(如果非猫则为0,如果是猫则为1),矩阵维度为(1,训练数据数量)
        返回:
        cost- 逻辑回归的负对数似然成本
        dw  - 相对于w的损失梯度,因此与w相同的形状
        db  - 相对于b的损失梯度,因此与b的形状相同
    """
    m = X.shape[1]    
    #正向传播
    A = sigmoid(np.dot(w.T,X) + b) #计算激活值,请参考公式2。
    cost = (- 1 / m) * np.sum(Y * np.log(A) + (1 - Y) * (np.log(1 - A))) #计算成本,请参考公式3和4。
    
    #反向传播
    dw = (1 / m) * np.dot(X, (A - Y).T) #请参考视频中的偏导公式。
    db = (1 / m) * np.sum(A - Y) #请参考视频中的偏导公式。
    #使用断言确保我的数据是正确的
    assert(dw.shape == w.shape)
    assert(db.dtype == float)
    cost = np.squeeze(cost)
    assert(cost.shape == ())
    
    #创建一个字典,把dw和db保存起来。
    grads = {
                "dw": dw,
                "db": db
             }
    return (grads , cost)

- 关于optimize函数里面的costs

原文对costs没有详细说明,按我的理解,每调用一次optimize()函数,costs[]都会被初始化(上一次优化得到的costs清空),函数结束时返回的costs是一个数组,存着本次优化(即用更新后的w和b来优化)过程中每100次迭代时所得到的损失函数值。

       costs=[J0 J100 J200 … J1900]
其中J后面的数字n代表第n次迭代,实际上i的值是从0开始的,即0~1999,所以有J0而没有J2000.

发布了8 篇原创文章 · 获赞 8 · 访问量 782

猜你喜欢

转载自blog.csdn.net/Clover_pofu/article/details/104401583