deeplearning.ai 编程作业问题总结 Neural Networks and Deep Learning

3 篇文章 0 订阅

Week2 Logistic Regression with a Neural Network mindset

在做编程作业的时候遇到了一个很奇怪的
现象:实现模型的准确率(accuracy)总是很低(~34)。
检查:每一步中间结果,初始化,前向,计算loss,计算梯度,更新参数,预测都可以得到预期的输出。
调参:以为是参数没有设置好,尝试调整,learning_rate和迭代次数。
结果:测试的准确率依旧很低。

然后尝试提交作业,居然100分???
这里写图片描述

说明不是后面模型实现的问题。
在论坛里面看了一下,有不少人遇到相同的问题。
原因在图片预处理的reshape步骤出错了。

NG 老师在提示里面已经给出了正确的reshape方法:
A trick when you want to flatten a matrix X of shape (a,b,c,d) to a matrix X_flatten of shape (b ∗ c ∗ d, a) is to use:

X_flatten = X.reshape(X.shape[0], -1).T 

我是用的

x_flattern = X.reshape(X.shape[1]*X.shape[2]*X.shape[3], -1)

虽然两种方法得到的ndarray的shape都是(b*c*d, a),但是取数据的次序不一样了,取数据出来的时候就会出错

下面使用简单一点的例子来观察两种reshape得到结果的区别:

a = np.reshape(np.array(range(1, 9)), [2, 2, 2])
a
Out[22]: 
array([[[1, 2],
        [3, 4]],
       [[5, 6],
        [7, 8]]])
b = np.reshape(a, [2, -1]).T
c = np.reshape(a, [4, -1])
b
Out[25]: 
array([[1, 5],
       [2, 6],
       [3, 7],
       [4, 8]])
c
Out[26]: 
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

ndarray里面的数字展开成1D数组[1, 2, 3, 4, 5, 6, 7 ,8]


b = np.reshape(a, [2, 4]).T
从最后一维开始组合数字,
[[1, 2, 3, 4],
[5, 6, 7, 8]]
然后是T 转置
[[1, 5],
[2, 6],
[3, 7],
[4, 8]]


[1, 2, 3, 4, 5, 6, 7 ,8]
c = np.reshape(a, [4, 2])
从最后一维开始组合数字,
[[1, 2],
[3, 4],
[5, 6],
[7, 8]]

回到最初的问题:
使用一下方法Reshape:
X_flatten = X.reshape(X.shape[0], -1).T
X_flatten[i] 取出来就是整个数据集中的一张图

这里写图片描述

X_flatten = X.reshape(X.shape[1]* X.shape[2] * X.shape[3], -1)
把图以m=X.shape[0]为步长切分,
然后当使用
X_flatten[i]取出来不是一张正常的图片,而是每张图都取了一部分点组成的奇怪数组,显示出来就是噪声点。因此模型的accuracy一直很低。
这里写图片描述
Q.E.D
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值