文章目录

  • 一些笔记
  • 写作业
    • 导入数据
    • 取出训练集、测试集
    • 处理数据的维度
    • 标准化数据
    • sigmoid 函数
    • 初始化参数w、b
    • 前向传播、代价函数、梯度下降
    • 优化
    • 预测函数
    • 模型整合
    • 使用模型
    • 绘制代价曲线
    • 单个样本测试
    • 不同alpha的比较
    • 预测新图

根据笔记中的公式进行构造函数,之后使用模型进行预测

一些笔记


写作业

导入数据

import h5py
import numpy as np
# 训练集、测试集
train_data = h5py.File('./train_catvnoncat.h5', "r")
test_data = h5py.File('./test_catvnoncat.h5', "r")
# h5 格式类似字典,处理的话需要导入h5py包
for key in train_data.keys():print(key)
# list_classes 类别
# train_set_x  猫片
# train_set_y  标签


查看一下训练集的格式

print(train_data['train_set_x'].shape)# 209个样本,64*64  三个通道
print(train_data['train_set_y'].shape) # 209个标签

测试集同理,50个样本

取出训练集、测试集

train_data_org=train_data['train_set_x'][:]
train_label_org=train_data['train_set_y'][:]
test_data_org=test_data['test_set_x'][:]
test_label_org=test_data['test_set_y'][:]
# 查看图片
import matplotlib.pyplot as plt%matplotlib inline
#  在线显示图片 或者使用plt.show
plt.imshow(train_data_org[148])

处理数据的维度

从上面手写笔记可以看出,每个实例对应的输入应该只有一列,但是数据集中输入为(64,64,3),所以需要进行处理数据的维度

m_train=train_data_org.shape[0]
m_test=test_data_org.shape[0]
train_data_flatten=train_data_org.reshape(m_train,-1).T
test_data_flatten=test_data_org.reshape(m_test,-1).Tprint(train_data_flatten.shape,test_data_flatten.shape)


标签的shape为(209,)需要处理成矩阵形式,使用上面reshape方法也可以,这里使用np中添加行

test_label_flatten=test_label_org[np.newaxis,:]
train_label_flatten=train_label_org[np.newaxis,:]
# 添加一行,将原来的(50,)变成(1,50)
#通常从二维数组里面抽取一列,取出来之后维度却变成了一维,如果我们需要将其还原为二维,就可以使用上述方法
# 也可以使用上面的reshape方法print(test_label_flatten.shape,train_label_flatten.shape)

标准化数据

图片的三个RGB通道,位于0-255,标签的量级在0、1,需要将其归一化,进行÷255即可

train_data_stan=train_data_flatten/255
test_data_stan=test_data_flatten/255

sigmoid 函数

def sigmoid(z):return 1/(1+np.exp(-z))

初始化参数w、b

n_dim = train_data_stan.shape[0]
w=np.zeros((n_dim,1))
b=0

前向传播、代价函数、梯度下降

def propagate(w,b,X,Y):#前向传播Z=np.dot(w.T,X)+bA=sigmoid(Z)# 代价函数m=X.shape[1]J=-1/m*np.sum(Y*np.log(A)+(1-Y)*np.log(1-A))# 梯度下降dw=1/m*np.dot(X,(A-Y).T)db=1/m*np.sum(A-Y)grands={"dw":dw,"db":db}return grands,J

优化

进行上述函数的多次迭代,进行梯度下降优化

def optimize(w,b,X,Y,alpha,n_iters,is_print):costs=[]for i in range(n_iters):grads,J=propagate(w,b,X,Y)dw=grads["dw"]db=grads["db"]w=w-alpha*dwb=b-alpha*dbif i %100==0:costs.append(J)if(is_print):print("n_iters is",i,"cost is",J)grands={"dw":dw,"db":db}params={"w":w,"b":b}return grads,params,costs

预测函数

通过上面梯度下降得到的w、b优化好的前向传播函数,进行预测测试集的结果

def predict(w,b,X_test):m = X_test.shape[1]Y_prediction = np.zeros((1,m))#放预测值的矩阵Z=np.dot(w.T,X_test)+bA=sigmoid(Z)for i in range(m):if A[0, i] <= 0.5:Y_prediction[0, i] = 0else:Y_prediction[0, i] = 1return Y_prediction

模型整合

将上面的函数封装到model()函数里面,方便调用

def model(w,b,X_train,Y_train,X_test,Y_test,alpha,n_iters,is_print):grads,params,costs=optimize(w,b,X_train,Y_train,alpha,n_iters,is_print)w,b=params['w'],params['b']##预测要在测试集上面预测,也要看在训练集上面的预测,来看看拟合程度Y_train_prediction=predict(w,b,X_train)Y_test_prediction=predict(w,b,X_test)##看两个预测结果的准确率print("train acc",np.mean(Y_train_prediction==Y_train)*100)    print("test acc",np.mean(Y_test_prediction==Y_test)*100)ret={'w':w,'b':b,   'costs':costs,'Y_train_prediction':Y_train_prediction,'Y_test_prediction':Y_test_prediction,'alpha':alpha}return ret

使用模型

ret=model(w,b,train_data_stan,train_label_flatten,test_data_stan,test_label_flatten,0.005,2000,True)

绘制代价曲线

plt.plot(ret['costs'])
plt.xlabel('100 iters')
plt.ylabel('cost')

单个样本测试

index = 18
plt.imshow(test_data_stan[:,index].reshape((64, 64, 3)))
#plt.imshow(test_data_org[index])
print ("y = " + str(test_label_flatten[0,index]) + ", you predicted  ",int(ret["Y_test_prediction"][0,index]))

不同alpha的比较

alphas=[0.01,0.001,0.0001]
for i in alphas:print ("learning rate is: " + str(i))ret=model(w,b,train_data_stan,train_label_flatten,test_data_stan,test_label_flatten,i,2000,False)print ('\n' + "-------------------------------------------------------" + '\n')plt.plot(ret['costs'],label=str(i))plt.xlabel('100 iters')
plt.ylabel('cost')
plt.legend()

预测新图

预测一下自己的图片

path='./1.jpg'
img=plt.imread(path)
plt.imshow(img)#img.shape (690,690,3)

#尺寸变换
from skimage import transform
img_tran=transform.resize(img,(64,64,3)).reshape(64*64*3,1)
#img_tran.shape (12288,1)
y=predict(ret['w'],ret['b'],img_tran)
print(y)#说明预测结果不是猫,EMMMM,正确率有点低,毕竟是最简单的神经网络了,www

吴恩达深度学习L1W2——实现简单逻辑回归相关推荐

  1. 吴恩达深度学习 —— 2.14 向量化逻辑回归的梯度输出

    这一节将学习如果向量化计算m个训练数据的梯度,强调一下,是同时计算. 前面已经说过,在逻辑回归中,有dz(1)=a(1)−y(1)dz^{(1)}=a^{(1)}-y^{(1)}dz(1)=a(1)− ...

  2. 吴恩达深度学习L1W2作业1

    ipython: import numpy as np def sigmoid(x):s = 1/(1 + np.exp(-x))return s x = np.array([1,2,3]) sigm ...

  3. 吴恩达深度学习笔记2.2 logistic回归

    regression:回归  supervised:有监督的 logistic回归是一种学习算法被用于有监督学习问题,当y全都是0或1时 例子:判断是否有猫 给定一个由特征向量x代表的图像,那个算法将 ...

  4. 深度学习入门首推资料--吴恩达深度学习全程笔记分享

    本文首发于微信公众号"StrongerTang",可打开微信搜一搜,或扫描文末二维码,关注查看更多文章. 原文链接:(https://mp.weixin.qq.com/s?__bi ...

  5. 花书+吴恩达深度学习(二八)深度生成模型之有向生成网络(VAE, GAN, 自回归网络)

    文章目录 0. 前言 1. sigmoid 信念网络 2. 生成器网络 3. 变分自编码器 VAE 4. 生成式对抗网络 GAN 5. 生成矩匹配网络 6. 自回归网络 6.1 线性自回归网络 6.2 ...

  6. 花书+吴恩达深度学习(二三)结构化概率模型(贝叶斯网络、马尔可夫随机场)

    文章目录 0. 前言 1. 有向模型 2. 无向模型 3. 因子图 4. 分离和d-分离 5. 从图模型中采样 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 花书+吴恩达深 ...

  7. 花书+吴恩达深度学习(二二)自编码器(欠完备,DAE,CAE,PSD)

    文章目录 0. 前言 1. 欠完备自编码器 2. 去噪自编码器 DAE 3. 收缩自编码器 CAE 4. 稀疏自编码器 5. 预测稀疏分解 PSD 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞 ...

  8. 花书+吴恩达深度学习(二十)构建模型策略(超参数调试、监督预训练、无监督预训练)

    目录 0. 前言 1. 学习率衰减 2. 调参策略 3. 贪心监督预训练 4. 贪心逐层无监督预训练 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十 ...

  9. 花书+吴恩达深度学习(十七)序列模型之长短期记忆 LSTM 和门控循环单元 GRU

    目录 0. 前言 1. 长短期记忆 LSTM 2. 门控循环单元 GRU 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十五)序列模型之循环神经网络 ...

最新文章

  1. glutSwapBuffers函数用法
  2. android用户界面-菜单
  3. MFC实现图像灰度、采样和量化功能详解
  4. xfce 双击窗口标题栏无法最大化解决办法
  5. PyTorch 1.0 中文文档:torch.hub
  6. 只有一条数据线了?iOS 14暗示苹果不在iPhone 12中附赠耳机
  7. python的requests模块功能_python-Requests模块的使用
  8. SQL Server插入geography、geometry和c_hierarchyid类型数据
  9. Linux 异步IO
  10. VB2010(24)窗体用户控件
  11. 新国标下的2020年电动单车企业蓬勃发展
  12. 会员功能竞品分析(一):唯品会、京东、苏宁易购
  13. Jenkins配置自动打包app发布蒲公英显示二维码
  14. 国内一些期刊的搞笑审稿
  15. 牛客:毕业生的纪念礼物(优先队列 || STL嵌套)
  16. google收购列表
  17. python 基础知识之(numpy、pandas、matplotlib、tensorflow)
  18. 国际商业美术设计师阿里云开发首页
  19. 薪酬管理系统数据库设计
  20. 基于MATLAB的机动车车牌自动识别系统

热门文章

  1. C++中goto的使用
  2. 反弹Shell命令一键生成工具
  3. 经典到下跪的那些资源网站盘点
  4. windows格式转换命令convert详解
  5. CSS 关键字 inherit 和 unset
  6. [转]华为公司员工待遇全面揭秘
  7. php代码编辑软件安卓,PHP代码编辑软件|Rapid PHP编辑器 v15.0 最新版
  8. Numbers for Mac(电子表格制作)
  9. LeetCode 每日一题1584. 连接所有点的最小费用
  10. Jxta 命令 shell