前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过简单神经网络识别猫图片

通过简单神经网络识别猫图片

作者头像
lovelife110
发布2021-01-14 14:47:09
5700
发布2021-01-14 14:47:09
举报
文章被收录于专栏:爱生活爱编程爱生活爱编程

代码位置:https://github.com/lilihongjava/deep_learning/tree/master/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E8%AF%86%E5%88%AB%E7%8C%AB

数据预处理:

数据为H5文件,保存训练集有209张64x64的图像,训练集的图像对应的分类值(【0 | 1】,0表示不是猫,1表示是猫)

测试集里面的图像数据(本训练集有50张64x64的图像),测试集的图像对应的分类值(【0 | 1】,0表示不是猫,1表示是猫)

训练集_图片的维数 : (209, 64, 64, 3),每个像素点由(R,G,B)三原色构成的,所以要乘以3

训练集_标签的维数 : (1, 209)

测试集_图片的维数: (50, 64, 64, 3)

测试集_标签的维数: (1, 50)

预处理将训练和测试数据压缩为一个平坦的图像方便处理

训练集降维最后的维度: (12288, 209) 训练集_标签的维数 : (1, 209) 测试集降维之后的维度: (12288, 50) 测试集_标签的维数 : (1, 50)

逻辑回归公式介绍

识别猫项目本质上为逻辑回归,只不过通过神经网络来实现,公式为

python代码激活函数为,此项目中,训练集X维度为(12288, 209)209个样本,w为(12288,1),

w^{T}
w^{T}

为(1,12288),b维度为(1, 209),但在python中可以为一个实数,python会自动转换为(1, 209)--python广播。计算完A的维度为(1,209)

代码语言:javascript
复制
A = sigmoid(np.dot(w.T, X) + b)

所有训练样例求和来计算成本,为什么L损失函数是

,而不是

,因为后面这个函数是非凸函数,可能找不到全局最优值

python代码为:

代码语言:javascript
复制
J = (- 1 / m) * np.sum(Y * np.log(A) + (1 - Y) * (np.log(1 - A))) 

逻辑回归的反向传播,关于w和b的偏导数,全局成本函数J是1到m损失函数求和的平均,所以J对w和b的求导也同样是各项损失函数对w和b导数的平均,单个样本dz求导是(a-y),dw求导是x(a-y),db求导是(a-y),所以m个样本的公式为:

dw=\frac1m\sum_{i=1}^mx^{(i)}(a^{(i)}-y^{(i)})
dw=\frac1m\sum_{i=1}^mx^{(i)}(a^{(i)}-y^{(i)})

python代码为:

代码语言:javascript
复制
dw = (1 / m) * np.dot(X, (A - Y).T)
代码语言:javascript
复制
db = (1 / m) * np.sum(A - Y)

梯度下降

通过最小化成本函数 J来学习 w和b 。对于参数 θ ,更新规则是

\theta = \theta - \alpha \text{ } d\theta
\theta = \theta - \alpha \text{ } d\theta

,其中 α 是学习率

构建网络步骤

建立神经网络的主要步骤是: 1. 定义模型结构(例如输入特征的数量) 2. 初始化模型的参数 3. 循环:

3.1 计算当前损失(正向传播)

3.2 计算当前梯度(反向传播)

3.3 更新参数(梯度下降)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据预处理:
  • 逻辑回归公式介绍
  • 梯度下降
  • 构建网络步骤
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档