在之前的文章中,介绍了神经网络的概念和算法思想,甚至给出了公式推导。但依然没有掌握神经网络的精髓,于是打算进一步学习就在网上观看了吴恩达大佬的《神经网络和深度学习》这门课程,觉得收获很大。目前只学习了单个神经元的原理及应用,下面简单总结一下。

1. 损失函数的定义

与之前介绍的单个神经元的工作原理不同之处在于损失函数的定义,这里把损失函数定义为:

推导思路:利用最大似然估计。先表达出p(y|x),然后求其最大值。大致推导过程如下:

课程中另一个重点是“消除for循环”,也就是说用向量来代替显示的for循环,这样做的好处是提高计算效率。实验测试100万条测试数据,向量化要比循环快上300倍。因此在以后的编码中,尽量把数据初始化成一个矩阵来处理。在这里值得注意的是,构造的矩阵应该每一列表示一个测试样例。

2. 代码实现

下面给出基于神经网络的二分类代码(python):

import numpy as np
import h5py
import math    def load_dataset():train_dataset = h5py.File('datasets/train_catvnoncat.h5', "r")train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # your train set featurestrain_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labelstest_dataset = h5py.File('datasets/test_catvnoncat.h5', "r")test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set featurestest_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labelsclasses = np.array(test_dataset["list_classes"][:]) # the list of classestrain_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0]))return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classesdef train_model(learning_rate=0.1):train_data_x, train_data_y, test_data_x, test_data_y, classes = load_dataset()  # 获取数据集  train_data_x = train_data_x.reshape(209, 64*64*3).T # 把训练数据构造成二维矩阵,行数为X的维度,列值为训练样本的个数row_count = 64*64*3 # 表示一个样例的维度examples_count = 209 # 表示样例的数量weight = np.zeros((64*64*3, 1)) # 初始化权值向量为0b = 0 # 初始化阈值为0dw = 0db = 0for i in range(1000):z = np.dot(weight.T, train_data_x) + b # 计算zy_hat = 1.0 / (1 + math.e**(-z)) # 计算预测值result = np.sum(abs(y_hat - train_data_y )) # 以累加y_hat-y的值来表示预测效果,result越小越好if result == 0:breakprint '%d:%d' %(i, result)dz = y_hat - train_data_y # 计算dL/dzdw = np.dot(train_data_x, dz.T) # 计算dL/dwdb = np.sum(dz)dw = dw * 1.0 / examples_countdb = db * 1.0 / examples_countweight = weight - learning_rate * dwb = b - learning_rate * db        return weight, bdef predict_data(weight, b):train_data_x, train_data_y, test_data_x, test_data_y, classes = load_dataset()  # 获取数据集row_count = 64 * 64 * 3 # 一个样例的维度example_count = 50 # 测试样例个数test_data_x = test_data_x.reshape(example_count, row_count).T # 转换成对应格式的矩阵z = np.dot(weight.T, test_data_x) + bpredict_y = 1.0 / (1 + math.e**(-z)) # 计算预测值print 'correct rate:',np.sum(predict_y == test_data_y)* 1.0 / example_countprint predict_yif __name__ == '__main__':train_data_x, train_data_y, test_data_x, test_data_y, classes = load_dataset()  # 获取数据集weight, b = train_model(learning_rate = 0.1) # 训练参数predict_data(weight, b) # 根据训练的参数进行预测

这里有一点需要注意,在构造矩阵的时候"test_data_x = test_data_x.reshape(example_count, row_count).T"并不等价于"test_data_x = test_data_x.reshape(row_count,example_count)",如果直接用第二个语句,则会打乱原来每个样例的数据,构造的矩阵毫无实际意义。

在该测试样例中,训练时大概需要迭代600多次即可收敛,最后预测的准确率约为:72%。

基于神经网络的二分类问题相关推荐

  1. 基于神经网络的文本分类(基于Pytorch实现)

    <Convolutional Neural Networks for Sentence Classification> 作者:Yoon Kim 单位:New York University ...

  2. MosMedData: 新冠肺炎胸部 CT扫描数据集上基于3D-CNN实现二分类

    MosMedData: 新冠肺炎胸部 CT扫描数据集上基于3D-CNN实现二分类 作者: WangXi2016 日期: 2022.10.27 摘要: 本示例教程使用3D CNN实现CT数据二分类. 1 ...

  3. 使用神经网络做二分类,输出层需要几个神经元?应该选择哪一种激活函数?如果要处理minst数据、输出层需要几个神经元?使用那种激活函数?如果使用神经网络预测房价,输出层需要几个神经元、使用什么激活函数?

    使用神经网络做二分类,输出层需要几个神经元?应该选择哪一种激活函数?如果要处理minst数据.输出层需要几个神经元?使用那种激活函数?如果使用神经网络预测房价,输出层需要几个神经元.使用什么激活函数? ...

  4. PyTorch搭建神经网络求解二分类问题

    PyTorch搭建全连接神经网络求解二分类问题 在求解线性回归问题的时候,我们已经学习了如何使用梯度下降算法来不断更新权重矩阵,使误差函数不断减小,这一节我们将使用PyTorch搭建一个简单的神经网络 ...

  5. python深度神经网络文本二分类代码_如何用Python和深度神经网络识别图像?

    只需要10几行Python代码,你就能自己构建机器视觉模型,对图片做出准确辨识和分类.快来试试吧! 视觉 进化的作用,让人类对图像的处理非常高效. 这里,我给你展示一张照片. 如果我这样问你: 你能否 ...

  6. 吴恩达老师深度学习视频课笔记:多隐含层神经网络公式推导(二分类)

            多隐含层神经网络的推导步骤非常类似于单隐含层神经网络的步骤,只不过是多重复几遍. 关于单隐含层神经网络公式的推导可以参考: http://blog.csdn.net/fengbingc ...

  7. 机器学习之基于Fisher实现二分类的人脸识别

    实验 2:基于 ORL 人脸库,实验样本主要来自于两个人,每人 45 张图片,共有 90 个样本,其中的 80 个样本作为训练样本,10 个作为测试样本.通过 LDA 实现两类问题的线性判别. 一个F ...

  8. 基于神经网络的文本分类算法

    文章目录 1.文件介绍 2.核心算法 cnn算法 3.操作步骤 1.预处理数据 2.生成数据集 3.执行训练 4.执行预测 5.框架安装方法 6.代码测试 模型:infer_model 模型:infe ...

  9. NNDL 实验五 前馈神经网络(1)二分类任务

    目录 前言 一.4.1 神经元 4.1.1 净活性值 [思考题]加权相加与仿射变换之间有什么区别和联系? 4.1.2 激活函数 动手实现<神经网络与深度学习>4.1节中提到的其他激活函数: ...

最新文章

  1. 德国波恩大学于鹏组根系与微生物互惠方向招收博士研究生
  2. 贪心,POJ(2709)
  3. mysql查看系统运行日志文件_mysql自身运行日志文件详解
  4. 责任心,内因还是外因?
  5. ssm使用全注解实现增删改查案例——mybatis-config.xml
  6. android层级关系图,画出 View 的层级 3D 图和树形图来分析层级关系
  7. 最强京东Java面试题(共现场4面)
  8. 海纳威上云 构建数字化透明工厂
  9. 信息学奥赛C++语言: 统计闰年
  10. Django-分页、中间件和请求的声明周期
  11. MATLAB算法实战应用案例精讲-【智能优化算法】蝙蝠算法-BA(附MATLAB和Python代码)
  12. 应用ImageJ对荧光图片进行半定量分析
  13. [收藏]使用GDI+绘制高质量图和字体
  14. 获取位置geolocation 加速度devicemotion 角度deviceorientation
  15. matlab取商,MATLAB-MTSP 遗传算法解决5种多旅行商问题(mtsp)的matlab程序 联合开发网 - pudn.com...
  16. 【Python机器学习】梯度下降法(一) | 优矿(uqer.io)
  17. vmware win7虚拟机运行异常卡顿问题解决
  18. 组合导航(一):定位技术分类与介绍
  19. 计算机的显卡功能,电脑怎么看显卡参数 显卡有什么作用
  20. java实现单链表就地逆置,单链表的就地逆置讲解

热门文章

  1. 创业板面世对本土微电子界的影响
  2. EMI、EMS和EMC简述
  3. 女生学高铁和计算机哪个更好,铁路最好的5个专业 女生学铁路什么专业好
  4. 2019-03-23日报
  5. IOS15保存图片至本地相机胶卷
  6. 全球及中国多功能激光打印机行业商业模式分析及投资风险预测2022年版
  7. #转# Glide图片框架
  8. aws s3直接通过JavaScript上传文件
  9. 下载Windows版本的Redis
  10. (FJWC2020)DTOJ 4681. 楼房搭建