神经网络Python实现(9行代码)

news2024/11/15 14:05:40

1. 神经网络简介

神经网络由输入层、输出层和之间若干层(一层或多层)隐含层构成,每一层可以有若干个节点。层与层之间节点的连接状态通过权重来体现

 下面介绍一下单个神经元:

输入节点:x1,x2

权重:w1,w2

偏置:b

激活函数:h()

输出结果:y

a = x1*w1 + x2*w2 + b

 2. 代码解释

这段代码是在GitHub上找到的,链接如下:

https://github.com/miloharper/simple-neural-network

作者这样描述这段代码:

A neural network written in Python, consisting of a single neuron that uses gradient descent to learn.

一种用Python编写的神经网络,它是由一个使用梯度下降学习的神经元组成。

from numpy import exp, array, random, dot
training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
training_set_outputs = array([[0, 1, 1, 0]]).T
random.seed(1)
synaptic_weights = 2 * random.random((3, 1)) - 1
for iteration in range(10000):
    output = 1 / (1 + exp(-(dot(training_set_inputs, synaptic_weights))))
    synaptic_weights += dot(training_set_inputs.T, (training_set_outputs - output) * output * (1 - output))
print( 1 / (1 + exp(-(dot(array([1, 0, 0]), synaptic_weights)))))

from numpy import exp, array, random, dot

#从Numpy库中调用exp(指数函数)、array(数组)、random(随机函数)、dot(矩阵相乘函数)

training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])

#神经网络训练部分的输入

training_set_outputs = array([[0, 1, 1, 0]]).T

#神经网络训练部分的输出,.T表示矩阵转置

random.seed(1)

#使用随机函数生成随机数(这一行代码可以省略,目的只是保证测试结果与作者一致)

synaptic_weights = 2 * random.random((3, 1)) 1

for iteration in range(10000):
   output = 1 / (1 + exp(-(dot(training_set_inputs, synaptic_weights))))

#使用for语句循环10000次,将训练集的输入和权重采用.dot进行矩阵相乘,将相乘得到的结果输入到sigmoid函数,然后将得到的结果赋值给output

   synaptic_weights += dot(training_set_inputs.T, (training_set_outputs - output) * output * (1 - output))

#权重的调整采用“误差加权导数”公式(梯度下降)

print (1 / (1 + exp(-(dot(array([1, 0, 0]), synaptic_weights))))) #[0.99993704]

#synaptic_weights是调整之后的最终权重,数组(矩阵)[1,0,0]与这个权重矩阵通过dot函数进行相乘,将相乘的结果作为输入引入到sigmoid函数,得到最终的结果

这段代码的模型如下图所示,有三个输入,一个输出,简单来说,神经网络就是一个通过训练集输入的数据不断地迭代更新权重的模型,使之输出更接近“标准答案”,这里推荐看一下B站上的一个有关神经网络的短视频:

一分钟告诉你什么是神经网络

 这9行代码就是把上图的1~4组数据作为训练集进行模型训练,不断地更新权重使其输出更接近训练集中给出的输出标签(标准答案),然后将最后一组数据当做测试集来检测模型的准确度,它最后的结果输出是0.99993704,也是约等于1,其实不难发现,4组测试数据的输出都与第一个输入数据相同,所以说神经网络模型测试得到了正确的结果,这也是说明神经网络有预测结果的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1323741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

27.BGP边界网关路由协议

BGP边界网关路由协议 外部网关路由协议 ospf能承载的路由条目有限 用在运营商与运营商之间,国与国之间 BGP运行在IGP之上(内部网关路由) IGP都是在物理链路上直连的基础之上才能建立邻居关系,BGP可以跨路由器建立邻居关系&…

Postman进行参数化的2种方式

前言 Postman作为一款接口测试工具,受到了非常多的开发工程师的拥护。 那么做为测试,了解Postman这款工具就成了必要的了。 这篇文章就是为了解决Postman怎么进行参数化的。 同时,我也为大家准备了一份软件测试视频教程(含面试、…

为“EYE”加码,蔡司光学公益助童活动走进湖南省宁乡市

为不断强化品牌的责任担当,用公益传递社会正能量。2023年11月28日,国内眼视光领域领导品牌蔡司光学携手海南精功眼镜走进湖南省宁乡市青少桥初级中学开展蔡司公益助童行动,全校共504名学生参与其中。 因爱而生,接续传递“EYE”的美…

arcmap + oracle11g 迁移数据 报错 copyFeatures失败

原因排查: 1.通过这个界面,我们无法查到真正的原因, 2.将数据拷贝到我们自己的arcmap服务器中,采用 单个要素 导入,从result面板中查找原因; 从上面这个图中,看到关键信息 DBMS error ORA-016…

Opencv入门五 (显示图片灰度值)

源码如下&#xff1a; #include <opencv2/opencv.hpp> int main(int argc, char** argv) { cv::Mat img_rgb, img_gry, img_cny; cv::namedWindow("Example Gray",cv::WINDOW_AUTOSIZE); cv::namedWindow("Example Canny", cv::WINDOW_…

数据隐私治理所面临的四大挑战

PrimiHub一款由密码学专家团队打造的开源隐私计算平台&#xff0c;专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 近年来&#xff0c;隐私功能越来越受到重视&#xff0c;在重大立法改革和加强监管审查的支持下&#xff0c;各组织通过部署和扩展…

07.stack 容器

7、stack 容器 概念&#xff1a; stack 是一种先进后出&#xff08;First In Last Out&#xff0c;FILO&#xff09;的数据结构&#xff0c;它只有一个出口 栈中只有顶端的元素才可以被外界使用&#xff0c;因此栈不允许有遍历行为栈中进入数据称为 — 入栈 push栈中弹出数据…

清理优化,卸载高效——PP Cleaner Uninstaller Pro for Mac

随着时间的推移&#xff0c;Mac电脑上的垃圾文件和无用程序可能会逐渐积累&#xff0c;影响电脑的性能和运行速度。为了解决这个问题&#xff0c;我们推荐您使用PP Cleaner & Uninstaller Pro for Mac软件&#xff0c;它是一款专业的清理和卸载工具&#xff0c;能够帮助您保…

基于ssm作业提交与查收系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本作业提交与查收系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信…

多对多关系通用操作组件,省时省力的神器

项目上有很多对多操作的场景&#xff0c;建对象&#xff0c;建mapper接口&#xff0c;设置查询条件&#xff0c;查询多对多数据等都是一项极为耗时耗力的工作。因此&#xff0c;搓了这款集建表-保存-查询-设置条件等操作于一体的组件。原理简单&#xff0c;利用$标签动态作些操…

【自动化测试】selenium元素定位方式大全!

前言 当我们在使用selenium进行自动化测试工作时&#xff0c;元素定位是非常重要的一环&#xff0c;因为我们是借助脚本模拟我们通过鼠标和键盘对元素进行点击、输入内容和滑动操作的&#xff0c;所以准确的元素定位是我们执行测试脚本的重要一环。本文就来给大家介绍一下sele…

windows11 ssd掉盘(无法访问)

故障描述&#xff1a; 开机的时候能够正常访问SSD当使用电源的时候很容易SSD无法访问接入电源以后掉盘情况缓解 故障原因&#xff1a;win11加入了一个新的电源策略 更改高级电源设置&#xff08;默认是10/20&#xff09;&#xff0c;把这个参数调整大。 非常蠢的一个设计&…

信号处理基础之噪声与降噪(二)| 时域降噪方法(平滑降噪、SVD降噪)python代码实现

接上期信号处理基础之噪声与降噪(一) | 噪声分类及python代码实现&#xff0c;本期为大家介绍噪声评价指标&#xff0c;并且讲解两种降噪方法——平滑降噪、SVD降噪&#xff0c;并给出python代码。 信号处理基础之噪声与降噪(二&#xff09;| 时域降噪方法&#xff08;平滑降噪…

Z Potentials | 叶生晅:生成式 AI 下不变的是需求,坚定成为客户的营销技术合伙人

移动互联网时代&#xff0c;视频、直播、兴趣电商、社交、新资讯等线上新平台新服务实现大发展&#xff0c;吸引用户加速融入日益不可或缺的线上生活和「线上线下」融合场景&#xff0c;铸就海量的流量红利。营销场景从来都是软件应用行业最大的市场&#xff0c;离客户的预算最…

基于ssm双星小区物业管理系统的设计与实现论文

摘 要 传统办法管理双星小区物业信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装双星小区物业管理系统软件来发挥其高效地信息处…

【性能测试】登录接口性能压测+选择并发用户数总结...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、需要登录的接口…

jvm相关命令操作

查看jvm使用情况 jmap -heap PID 查看线程使用情况 jstack pid 查看当前线程数 jstack 21294 |grep -E (#[0-9]) -o -c 查看系统线程数 top -H top -Hp pid #查看具体的进程中的线程信息 使用 jps 命令查看配置了JVM的服务 查看某个进程JVM的GC使用情况 jstat -gc 进程…

配置 vim 默认显示行号 行数 :set number

vi ~/.vimrc 最后添加一行 :set number保存退出&#xff0c;再次 vim 打开文件&#xff0c;默认就会显示行号了

ctfshow(web190-web200)

目录 web190 web191 web192 web193 web194 web195 web196 web197 web198 web199 web200 web190 为什么要有admin呢 这也是试出来的 这个admin必须是数据库中存在的 这样才能使用布尔注入 因为这个时候登录 有两种返回结果 一种密码错误 一种就是用户名错误 admin an…

自动化测试工具-Selenium:Selenium的核心三大组件详解

目录 1. WebDriver 1.1 WebDriver的通信方式 1.2 WebDriver的功能 1.3 W3C推荐标准 2. Grid 3. IDE Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。官方对Selenium认可的三大组件或API分别是&#xff1a;WebDriver、Selenium IDE、Grid。其中&#xff0c…