吴恩达第二周编程作业补充

吴恩达第二周编程作业补充

209表示训练集数量,64表示长宽,3表示RGB
50表示测试集数量
shape[0],shape[1],shape[2],shape[3]

1、测试集与训练集的划分:

  • 避免过拟合(在训练集表现的好,测试集表现的不好),在训练集上训练模型,在测试集上评估模型的泛化能力。
  • 预测值和实际值的差别用来衡量模型的预测性能。

2、压缩像素

org代表预处理,机器学习中一个常见的预处理步骤是对数据集进行居中和标准化,这意味着可以减去每个示例中整个numpy数组的平均值,然后将每个示例除以整个numpy数组的标准偏差。对于图片数据集,更简单方便,几乎可以将数据集的每一行除以255(像素通道的最大值),得到标准化数据,位于[0,1]间。

"""
为了表示彩色图像,必须为每个像素指定红色,绿色和蓝色通道(RGB),因此像素值实际上是从0到255范围内的三个数字的向量。
机器学习中一个常见的预处理步骤是对数据集进行居中和标准化,这意味着可以减去每个示例中整个numpy数组的平均值,
然后将每个示例除以整个numpy数组的标准偏差。但对于图片数据集,
它更简单,更方便,几乎可以将数据集的每一行除以255(像素通道的最大值),因为在RGB中不存在比255大的数据,
所以我们可以放心的除以255,让标准化的数据位于[0,1]之间,现在标准化我们的数据集:
像素值位于0到1之间
"""
train_set_x = train_set_x_flatten / 255
test_set_x = test_set_x_flatten / 255

3、使用公式


前向传播:
在这里插入图片描述
反向传播:
在这里插入图片描述
4、reshape()的使用

  • 注意括号
  • 下面两种用法结果是不一样的:
>>> a = np.random.rand(2,3)
>>> a.T
array([[0.45372209, 0.45144343],
       [0.11429983, 0.9902159 ],
       [0.19452138, 0.86151426]])
>>> a.reshape(3,2)
array([[0.45372209, 0.11429983],
       [0.19452138, 0.45144343],
       [0.9902159 , 0.86151426]])

5、建立神经网络的主要步骤

1.定义模型结构(例如输入特征的数量)
2.初始化模型的参数
3.循环:
    3.1 计算当前损失(正向传播)
    3.2 计算当前梯度(反向传播)
    3.3 更新参数(梯度下降)

6、numpy的一些方法

  • np.dot(a,b) 求内积,这里的a和b可以是数组,列表,字典或者向量
  • np.exp(-z) == e^(-z)
  • np.zeros((m, 1)) 注意括号
  • np.sum(w) 最后得到的结果是一个数
  • np.array([[1], [2]]), np.array([[1, 2], [3, 4]]), np.array([[1, 0]])
  • np.squeeze(x), [x]->x, 压缩维度

7、不同学习率

# 制作折线图对比不同学习率
learning_rates = [0.01, 0.001, 0.0001]
models = {}
for i in learning_rates:
    print("learning rate is: " + str(i))
    models[str(i)] = model(train_set_x, train_set_y, test_set_x, test_set_y, num_iterations = 1500, learning_rate = i, print_cost = False)
    print('\n' + "-------------------------------------------------------" + '\n')

for i in learning_rates:
    # 注意,这个label和legend是相连使用的
    plt.plot(np.squeeze(models[str(i)]["costs"]), label=str(models[str(i)]["learning_rate"]))

plt.ylabel('cost')
plt.xlabel('iterations')

legend = plt.legend(loc='upper center', shadow=True)        # shadow设置背景为灰色
frame = legend.get_frame()      # 获得背景
frame.set_facecolor('0.90')     # 设置背景透明度
plt.show()

运行结果:
在这里插入图片描述
8、其他
scipy.misc.imresize在1.3版本后已经被删除了,现在已被代替
9、补充
前提:
X.shape=(Nx,m) W.shape=(Nx,1)
Y.shape=(1,m) Z.shape=(1,m)
b是一个数
A为预测值,=Y^

流程:
	加载数据
	定义sigmoid函数,初始化参数w,b
	前向传播求出代价函数,后向传播求出dw,db
	优化 进行多次迭代,不断更新w,b,返回w,b,dw,db
	预测 使用sigmoid进行预测,大于0.5,=1,小于0.5,=0,返回预测行矩阵
	模型整合 ,预测值与真实值进行比对

1.  使用了h5py模块作为打开.h5文件的工具; .h5文件里一般以键值对方式进行存储
2.  train_set_x_orig是图片样式,即是X矩阵
    train_set_y_orig是预测标签,即是Y矩阵
    train_set_x_orig :保存的是训练集里面的图像数据(本训练集有209张64x64的图像)。
    train_set_y_orig :保存的是训练集的图像对应的分类值(【0 | 1】,0表示不是猫,1表示是猫)。
    test_set_x_orig :保存的是测试集里面的图像数据(本训练集有50张64x64的图像)。
    test_set_y_orig : 保存的是测试集的图像对应的分类值(【0 | 1】,0表示不是猫,1表示是猫)。
    classes : 保存的是以bytes类型保存的两个字符串数据,数据为:[b’non-cat’ b’cat’]。
3.  因为Y预测矩阵在打开时,其shape为(209,),该种方式不规范,应调整为shape(1,209)
  有两种方式解决该问题:
  train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))
  # 在前面增加一维,变成(1,209)
  train_set_y_orig = train_set_y_orig.reshape[np.newaxis,:]

4. 若想查看.h5文件的内容可用如下方式:
for key in train_dataset.keys():
    print(f’train_dataset[{key}].name=’,train_dataset[key].name)
    print(f’train_dataset[{key}].shape=’,train_dataset[key].shape)
    print(f’train_dataset[{key}].value=’,train_dataset[key].value)
5. plt.imshow()是用来打开图片的,后面需要跟着plt.show()
6. np.squeeze()压缩维度,[1] --> 1
7. 因为classes里保存的是bytes类型的,要想将其转成正常str,需要先对其进行解码
8. train_set_x_orig.shape=(209,64,64,3)
 209为样本个数(m),后面为RGB
 想要将其调整为正常X.shape=(Nx,m),使用:
    train_set_x_orig.reshape(train_set_x_orig.shape[0], -1).T
9. 标准化,数据之间差距太大,影响性能,要降低差别,所以标准化到(0,1)之间,/255
10. 在逻辑回归中权重参数可以初始化为0,在神经网络中不可
11. dw和db求的是 和平均
12. 预测值与真实值进行比对
  两种方法:
    print(“训练集准确性:”, format(100 - np.mean(np.abs(Y_prediction_train - Y_train)) * 100), “%”)
    print(“训练集准确性:”, np.mean(Y_prediction_train==Y_train)*100, “%”)
13. 学习率
当学习率过大的时候会导致模型难以收敛,过小的时候会收敛速度过慢,学习率是一个十分重要的参数,合理的学习率才能让模型收敛到最小点而非局部最优点或鞍点
学习率越低,损失函数的变化速度就越慢,容易过拟合

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值