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

博主【何宽】分享的【作业参考】已经非常完善,但我直接复制完整代码在自己的虚拟机上跑还是有些小问题,针对这些问题我在此提出其中一些需要注意的地方。

<tr >标签

突然出现一部分带这种标签的代码,去查了一下发现是HTML的标签,出现在这是想说明什么我没太在意,直接跳到了下面的initialize_parameters_deep函数,结果没影响。

关于initialize_parameters_deep函数

其中在初始化W参数时有个“除以np.sqrt[layers_dims[l - 1]”的操作(其中np.sqrt(B)函数是求B的开方),直接键入代码测试输出与博主的不一致。将其改成*0.01的操作后测试输出与博主一致。但是!!!最后跑多层模型的时候要改回来,不然结果很不理想,具体见下面的L层模型运行结果。此外,还存在缩进问题,即for循环中应有四行代码。综上,将该函数改为
在这里插入图片描述

L_model_forward函数

里面参数L=len(parameters)//2,注释里说parameters是initialize_parameters_deep()的输出,而因为该输出包含相同长度的W和b,也就是说它长度一定是2的整数倍,那为什么还要用//向下取整,而不是直接L=len(parameters)/2?
把代码中的//改成/之后,运行报错,提示:
在这里插入图片描述
意思是改成/之后,L就变成了浮点型,而不是整形。为了进一步验证,尝试以下输入:
在这里插入图片描述
按照这个道理,我把代码改成L=int(len(parameters)/2),点击运行,结果也是一样的。(好吧这一部分不明白的原因就是自己的语法基础不扎实,提出来是为了让和我一样有疑惑的同学明白这里为啥这样写)
另,关于for循环,从range(1,L),l的值是从1到L-1.这也是基础语法知识。

two_layer_model函数

grads和costs都没有定义,应该在for循环前加以定义,即
在这里插入图片描述
定义后运行代码,成功!但结果和原博主的有有差别:
在这里插入图片描述
在这里插入图片描述

L层模型运行结果

按照博主设置的层参数(12288,20,7,1),我跑出来的结果很不理想,最后收敛在0.64. 找了好久原因,最后发现把之前的initialize_parameters_deep函数中初始化变成博主写的就可以了!!!!!即在这里插入图片描述
真的把我坑到,至于为什么要/np.sqrt(layers_dims[l - 1]),是之后的知识。

尝试的运行结果最好的参数

在这里插入图片描述
结果为
在这里插入图片描述

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

猜你喜欢

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