0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是神经网络应用-2

汽车电子技术 来源:Python数据分析之旅 作者: cauwfq 2023-02-24 15:43 次阅读

pYYBAGP4ac-AKJzuAACtIY_Gk1M733.png

一.项目背景

本项目在之前项目分类模型基础上神经网络应用(一)进一步拓展神经网络应用,相比之前本项目增加了新的知识点,比如正则化,softmax函数和交叉熵损失函数等。


二.前期准备

1.正则化
    1)解释:在机器学习中为了防止模型过拟合(简单说就是在训练集上样本表现的
很好,在测试集上表现的很差),经常需要进行正则化,所谓正则化简单来说就是让模
型系数变得相对小一点,防止数据稍微变化引起模型图形曲线较大波动,总之一句话,
让模型曲线表现更加平稳。
    2)分类:正则化总体分类为L1正则化和L2正则化。两者区别在于范数级别不同,
L2正则化是||w||2,L1正则化是||w||1范数,并且L2正则倾向于系数W尽量均衡(非
零分量个数尽量多),L1正则化使W分类尽量稀疏(非零分量个数尽量少),我们以线
性回归为例,简单说明一下。

poYBAGP4afGAcNX8AAFLtHyMSrM296.png

poYBAGP4afyAfz3OAACR2Ipk1zg673.png

【注】正则项不包括截距项。

2.Softmax函数
   1)Softmax经常被应用在多分类任务的神经网络中的输出层,简单理解可以认为
Softmax输出的是几个类别选择的概率。比如我有一个二分类任务,Softmax函数可以
根据它们相对的大小,输出二个类别选取的概率,并且概率和为1。表达式如下,Si代
表的是第i个神经元的输出。

poYBAGP4ahCAf8xbAAAQQb48PlY557.png

softmax函数

poYBAGP4ahmAABlyAAAKFgG-ylU953.png
3.交叉熵损失函数
   在神经网络反向传播中需要损失函数,损失函数其实表示的是真实值与网络的估计
值的误差,有了这个误差我们才能知道怎样去修改网络中的权重。损失函数可以有很多
形式,这里用的是交叉熵函数,主要是由于这个求导结果比较简单,易于计算,并且交
叉熵解决某些损失函数学习缓慢的问题,函数表达式如下

pYYBAGP4ai-AVLe4AAAJ70E8Ghk002.png
它的导数推到过程我们就不再说明,网上有很多资料大家可以参考,针对本项目分类
模型,我们最终结果为如下,也就是我们的预测概率值减去目标值。

pYYBAGP4akOAe_RZAAALLWLn0zk586.png

三.实现过程

1.生成数据

#生成数据
def generate_data():
    #设定种子数,保定生成数据相同
    np.random.seed(0)
    #生成数据集和标签,noise表示产生噪音
    X, y = datasets.make_moons(200, noise=0.20)
    #返回数据集
    return X, y
2.构建模型

#计算损失函数
def calculate_loss(model, X, y):
    #训练样本个数
    num_examples = len(X)  # training set size
    #加载模型参数
    W1, b1, W2, b2 = model['W1'], model['b1'], model['W2'], model['b2']
    #前向传播
    z1 = X.dot(W1) + b1
    a1 = np.tanh(z1)
    z2 = a1.dot(W2) + b2
    exp_scores = np.exp(z2)
    #softmax函数归一化
    probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
    #定义交叉熵损失函数
    corect_logprobs = -np.log(probs[range(num_examples), y])
    #计算总的损失函数
    data_loss = np.sum(corect_logprobs)
    #L2正则化,防止过拟合
    data_loss += Config.reg_lambda / 2 * (np.sum(np.square(W1)) + np.sum(np.square(W2)))
    #除以样本总数
    return 1. / num_examples * data_loss
 
#构建模型
def build_model(X, y, nn_hdim, num_passes=20000, print_loss=False):
    #样本个数
    num_examples = len(X)
    #记录随机中子数
    np.random.seed(0)
    #初始化神经网络参数
    W1 = np.random.randn(Config.nn_input_dim, nn_hdim) / np.sqrt(Config.nn_input_dim)
    b1 = np.zeros((1, nn_hdim))
    W2 = np.random.randn(nn_hdim, Config.nn_output_dim) / np.sqrt(nn_hdim)
    b2 = np.zeros((1, Config.nn_output_dim))

    #存储模型参数
    model = {}
    #遍历每一轮
    for i in range(0, num_passes):
        #前向传播
        z1 = X.dot(W1) + b1
        #函数表达式(e(z)-e(-z))/(e(z)+e(-z))
        #隐藏层输出
        a1 = np.tanh(z1)
        z2 = a1.dot(W2) + b2
        #输出层输出
        exp_scores = np.exp(z2)
        #计算概率
        probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
        #反向传播
        delta3 = probs
        #计算损失函数导数
        delta3[range(num_examples), y] -= 1
        #计算w2梯度
        dW2 = (a1.T).dot(delta3)
        #计算b2梯度
        db2 = np.sum(delta3, axis=0, keepdims=True)
        #计算输入层到隐藏层总误差
        delta2 = delta3.dot(W2.T) * (1 - np.power(a1, 2))
        #计算w1梯度
        dW1 = np.dot(X.T, delta2)
        #计算b1梯度
        db1 = np.sum(delta2, axis=0)

        #正则化系数w(只对w进行正则化,b不改变)
        dW2 += Config.reg_lambda * W2
        dW1 += Config.reg_lambda * W1

        #更新参数
        W1 += -Config.epsilon * dW1
        b1 += -Config.epsilon * db1
        W2 += -Config.epsilon * dW2
        b2 += -Config.epsilon * db2

        #存储模型参数
        model = {'W1': W1, 'b1': b1, 'W2': W2, 'b2': b2}

        #输出损失函数
        if print_loss and i % 1000 == 0:
            print("Loss after iteration %i: %f" % (i, calculate_loss(model, X, y)))
    
    #返回模型参数
    return model
3.预测样本
#预测样本
def predict(model, x):
    #加载模型参数
    W1, b1, W2, b2 = model['W1'], model['b1'], model['W2'], model['b2']
    #前向传播
    z1 = x.dot(W1) + b1
    a1 = np.tanh(z1)
    z2 = a1.dot(W2) + b2
    #计算总体输出
    exp_scores = np.exp(z2)
    #softmax函数
    probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
    #返回预测概率最大值对应标签
    return np.argmax(probs, axis=1)
4.绘制图形可视化

#绘制边界线
def plot_decision_boundary(pred_func, X, y):
    #分别设置间隔
    x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
    y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
    #步长
    h = 0.01
    #生成网格数据
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    #预测整个网格z值
    Z = pred_func(np.c_[xx.ravel(), yy.ravel()])
    
    Z = Z.reshape(xx.shape)
    #绘制分割线
    plt.contourf(xx,
                 yy,
                 Z,
                 cmap=plt.cm.Spectral)
    #绘制散点图
    plt.scatter(X[:, 0], 
                X[:, 1],
                c=y, 
                cmap=plt.cm.Spectral)
    #显示图形
    plt.show()

#可视化函数
def visualize(X, y, model):
    #绘制图形
    plot_decision_boundary(lambda x:predict(model,x), X, y)
    #设置标题
    plt.title("Neural Network")

#主函数
def main():
    #生成数据
    X, y = generate_data()
    #构建模型
    model = build_model(X, y, 3, print_loss=True)
    #可视化
    visualize(X, y, model)
    #预测准确样本数
    accuracy=0
    #设定种子数,保定生成数据相同
    np.random.seed(1)
    #生成数据集和标签,noise表示产生噪音
    X_test, y = datasets.make_moons(200, noise=0.20)
    #验证测试集
    for i in range(len(X_test)):
        #预测测试集
        if y[i]==predict(model,X_test[i]):
            #预测准确数目
            accuracy+=1
    #输出准确率
    print("Accuracy:",float(accuracy)/len(X_test))
 
 结论:准确率为96%(这里测试集数据我们添加了噪音),如果在产生测试集数据时取掉
 noise参数(也就是说取掉噪音数据),准确率会更高。

poYBAGP4ao-AemNKAACOZl_OfSw001.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4799

    浏览量

    102510
  • 函数
    +关注

    关注

    3

    文章

    4366

    浏览量

    63980
  • Softmax
    +关注

    关注

    0

    文章

    9

    浏览量

    2664
收藏 人收藏
    相关推荐
    热点推荐

    [11.2.2]--神经网络2

    机器视觉
    学习电子知识
    发布于 :2022年11月25日 21:24:09

    卷积神经网络(2)#人工智能

    人工智能
    jf_49750429
    发布于 :2022年11月28日 00:55:15

    4.5深度神经网络(2)#人工智能

    人工智能
    jf_49750429
    发布于 :2022年11月28日 16:13:22

    8.2 BP神经网络(2)#人工智能

    人工智能
    jf_49750429
    发布于 :2022年11月28日 19:33:23

    8.4 卷积神经网络及应用(2)#人工智能

    机器人神经网络人工智能
    jf_49750429
    发布于 :2022年11月28日 22:54:29

    9.1 卷积神经网络(2)#人工智能

    机器人神经网络人工智能
    jf_49750429
    发布于 :2022年11月28日 23:10:46

    人工神经网络(2)#人工智能

    人工智能
    jf_49750429
    发布于 :2022年11月29日 02:06:30

    常见卷积神经网络(2)#人工智能

    人工智能
    jf_49750429
    发布于 :2022年11月29日 05:40:11

    1 LeNet神经网络(2)#神经网络

    神经网络深度学习
    未来加油dz
    发布于 :2023年05月16日 15:31:35

    3.1 多层神经网络(2)#神经网络

    神经网络深度学习
    未来加油dz
    发布于 :2023年05月16日 18:50:47

    6 实现多层神经网络(2)#神经网络

    神经网络深度学习
    未来加油dz
    发布于 :2023年05月17日 11:43:17

    初识神经网络(2)#人工智能

    人工智能
    未来加油dz
    发布于 :2023年07月25日 11:23:53

    RBF神经网络(2)#人工智能

    神经网络人工智能
    未来加油dz
    发布于 :2023年07月27日 11:26:00

    【PYNQ-Z2申请】基于PYNQ的卷积神经网络加速

    ,得到训练参数2、利用开发板arm与FPGA联合的特性,在arm端实现图像预处理已经卷积核神经网络的池化、激活函数和全连接,在FPGA端实现卷积运算3、对整个系统进行调试。4、在基本实现系统的基础上
    发表于 12-19 11:37

    用Python从头实现一个神经网络来理解神经网络的原理2

    有个事情可能会让初学者惊讶:神经网络模型并不复杂!『神经网络』这个词让人觉得很高大上,但实际上神经网络算法要比人们想象的简单。 这篇文章完全是为新手准备的。我们会通过用Python从头实现一个
    的头像 发表于 02-27 15:06 775次阅读
    用Python从头实现一个<b class='flag-5'>神经网络</b>来理解<b class='flag-5'>神经网络</b>的原理<b class='flag-5'>2</b>

    3核A7+单核M0多核异构,米尔全新低功耗RK3506核心板发布

    近日,米尔电子发布MYC-YR3506核心板和开发板,基于国产新一代入门级工业处理器瑞芯微RK3506,这款芯片采用三核Cortex-A7+单核Cortex-M0多核异构设计,不仅拥有丰富的工业接口、低功耗设计,还具备低延时和高实时性的特点。核心板提供RK3506B/RK3506J、商业级/工业级、512MB/256MBLPDDR3L、8GBeMMC/256

    米尔电子
    1小时前
    21

    搭建树莓派网络监控系统:顶级工具与技术终极指南!

    树莓派网络监控系统是一种经济高效且功能多样的解决方案,可用于监控网络性能、流量及整体运行状况。借助树莓派,我们可以搭建一个网络监控系统,实时洞察网络活动,从而帮助识别问题、优化性能并确保网络安全。安装树莓派网络监控系统有诸多益处。树莓派具备以太网接口,还内置了Wi-Fi功能,拥有足够的计算能力和内存,能够在Linux或Windows系统上运行。因此,那些为L

    上海晶珩电子科技有限公司
    18小时前
    304

    STM32驱动SD NAND(贴片式SD卡)全测试:GSR手环生物数据存储的擦写寿命与速度实测

    在智能皮电手环及数据存储技术不断迭代的当下,主控 MCU STM32H750 与存储 SD NAND MKDV4GIL-AST 的强强联合,正引领行业进入全新发展阶段。二者凭借低功耗、高速读写与卓越稳定性的深度融合,以及高容量低成本的突出优势,成为大规模生产场景下极具竞争力的数据存储解决方案。

    MK米客方德
    19小时前
    321

    芯对话 | CBM16AD125Q这款ADC如何让我的性能翻倍?

    综述在当今数字化时代,模数转换器(ADC)作为连接模拟世界与数字系统的关键桥梁,其技术发展对众多行业有着深远影响。从通信领域追求更高的数据传输速率与质量,到医疗影像领域渴望更精准的疾病诊断,再到工业控制领域需要适应复杂恶劣环境的稳定信号处理,ADC的性能提升成为推动这些行业进步的重要因素。行业现状分析在通信行业,5G乃至未来6G的发展,对基站信号处理提出了极

    芯佰微电子
    22小时前
    241

    史上最全面解析:开关电源各功能电路

    01开关电源的电路组成开关电源的主要电路是由输入电磁干扰滤波器(EMI)、整流滤波电路、功率变换电路、PWM控制器电路、输出整流滤波电路组成。辅助电路有输入过欠压保护电路、输出过欠压保护电路、输出过流保护电路、输出短路保护电路等。开关电源的电路组成方框图如下:02输入电路的原理及常见电路1AC输入整流滤波电路原理①防雷电路:当有雷击,产生高压经电网导入电源时

    张飞实战电子官方
    1天前
    343

    有几种电平转换电路,适用于不同的场景

    一.起因一般在消费电路的元器件之间,不同的器件IO的电压是不同的,常规的有5V,3.3V,1.8V等。当器件的IO电压一样的时候,比如都是5V,都是3.3V,那么其之间可以直接通讯,比如拉中断,I2Cdata/clk脚双方直接通讯等。当器件的IO电压不一样的时候,就需要进行电平转换,不然无法实现高低电平的变化。二.电平转换电路常见的有几种电平转换电路,适用于

    张飞实战电子官方
    2天前
    324

    瑞萨RA8系列教程 | 基于 RASC 生成 Keil 工程

    对于不习惯用 e2 studio 进行开发的同学,可以借助 RASC 生成 Keil 工程,然后在 Keil 环境下愉快的完成开发任务。

    RA生态工作室
    05-01 10:00
    588

    共赴之约 | 第二十七届中国北京国际科技产业博览会圆满落幕

    作为第二十七届北京科博会的参展方,芯佰微有幸与800余家全球科技同仁共赴「科技引领创享未来」之约!文章来源:北京贸促5月11日下午,第二十七届中国北京国际科技产业博览会圆满落幕。本届北京科博会主题为“科技引领创享未来”,由北京市人民政府主办,北京市贸促会,北京市科委、中关村管委会,北京市经济和信息化局,北京市知识产权局和北辰集团共同承办。5万平方米的展览云集

    芯佰微电子
    2天前
    891

    道生物联与巍泰技术联合发布 RTK 无线定位系统:TurMass™ 技术与厘米级高精度定位的深度融合

    道生物联与巍泰技术联合推出全新一代 RTK 无线定位系统——WTS-100(V3.0 RTK)。该系统以巍泰技术自主研发的 RTK(实时动态载波相位差分)高精度定位技术为核心,深度融合道生物联国产新兴窄带高并发 TurMass™ 无线通信技术,为室外大规模定位场景提供厘米级高精度、广覆盖、高并发、低功耗、低成本的一站式解决方案,助力行业智能化升级。

    道生物联
    2天前
    691

    智能家居中的清凉“智”选,310V无刷吊扇驱动方案--其利天下

    炎炎夏日,如何营造出清凉、舒适且节能的室内环境成为了大众关注的焦点。吊扇作为一种经典的家用电器,以其大风量、长寿命、低能耗等优势,依然是众多家庭的首选。而随着智能控制技术与无刷电机技术的不断进步,吊扇正朝着智能化、高效化、低噪化的方向发展。那么接下来小编将结合目前市面上的指标,详细为大家讲解其利天下有限公司推出的无刷吊扇驱动方案。▲其利天下无刷吊扇驱动方案一

    其利天下技术
    05-10 16:29
    1.5k

    电源入口处防反接电路-汽车电子硬件电路设计

    一、为什么要设计防反接电路电源入口处接线及线束制作一般人为操作,有正极和负极接反的可能性,可能会损坏电源和负载电路;汽车电子产品电性能测试标准ISO16750-2的4.7节包含了电压极性反接测试,汽车电子产品须通过该项测试。二、防反接电路设计1.基础版:二极管串联二极管是最简单的防反接电路,因为电源有电源路径(即正极)和返回路径(即负极,GND),那么用二极

    张飞实战电子官方
    05-09 19:34
    1.1k

    半导体芯片需要做哪些测试

    首先我们需要了解芯片制造环节做⼀款芯片最基本的环节是设计->流片->封装->测试,芯片成本构成⼀般为人力成本20%,流片40%,封装35%,测试5%(对于先进工艺,流片成本可能超过60%)。测试其实是芯片各个环节中最“便宜”的一步,在这个每家公司都喊着“CostDown”的激烈市场中,人力成本逐年攀升,晶圆厂和封装厂都在乙方市场中“叱咤风云”,唯独只有测试显

    汉通达
    05-09 10:02
    963

    解决方案 | 芯佰微赋能示波器:高速ADC、USB控制器和RS232芯片——高性能示波器的秘密武器!

    示波器解决方案总述:示波器是电子技术领域中不可或缺的精密测量仪器,通过直观的波形显示,将电信号随时间的变化转化为可视化图形,使复杂的电子现象变得清晰易懂。无论是在科研探索、工业检测还是通信领域,示波器都发挥着不可替代的作用,帮助工程师和技术人员深入剖析电信号的细节,精准定位问题所在,为创新与发展提供坚实的技术支撑。一、技术瓶颈亟待突破性能指标受限:受模拟前端

    芯佰微电子
    05-09 10:36
    1.6k

    硬件设计基础----运算放大器

    1什么是运算放大器运算放大器(运放)用于调节和放大模拟信号,运放是一个内含多级放大电路的集成器件,如图所示:左图为同相位,Vn端接地或稳定的电平,Vp端电平上升,则输出端Vo电平上升,Vp端电平下降,则输出端Vo电平下降;右图为反相位,Vp端接地或稳定的电平,Vn端电平上升,则输出端Vo电平下降,Vn端电平下降,则输出端Vo电平上升2运算放大器的性质理想运算

    张飞实战电子官方
    05-08 19:34
    687

    ElfBoard技术贴|如何调整eMMC存储分区

    ELF 2开发板基于瑞芯微RK3588高性能处理器设计,拥有四核ARM Cortex-A76与四核ARM Cortex-A55的CPU架构,主频高达2.4GHz,内置6TOPS算力的NPU,这一设计让它能够轻松驾驭多种深度学习框架,高效处理各类复杂的AI任务。

    ElfBoard
    05-08 15:01
    1.2k