从零开始学习深度学习库-1:前馈网络

news2024/11/17 15:37:18

你好!欢迎来到这个系列的第一篇文章,我们将尝试用Python构建自己的深度学习库。在这篇文章中,我们将开始编写一个简单的前馈神经网络。我们将仅在这篇文章中处理前向传播,并在下一篇文章中处理网络的训练。这篇文章将介绍基本的前馈神经网络如何接收输入并从中产生输出。

首先,什么是神经网络?

神经网络是一种机器学习技术,它大致模仿了大脑的模型。和所有机器学习技术一样,它通过包含输入及其对应输出的数据集来学习。神经网络由层组成。每一层都通过权重和偏置与下一层相连。这些权重和偏置被网络用来计算它将给出的输出。在网络训练时,这些权重和偏置会被调整,以便网络根据其训练的数据产生最优输出。
在这里插入图片描述
这张图展示了一个三层的神经网络。连接节点的线条用于表示网络的权重和偏置。

它们是如何工作的?(数学原理)

每一层都有自己的权重和偏置。
权重和偏置最初开始时是一个随机值矩阵。
一个基本的前馈神经网络只包含线性层。
线性层使用以下公式产生它们的输出。

x @ w + b

其中...
x 是输入到该层的数据
w 是该层的权重
b 是该层的偏置
(@ 表示矩阵乘法)

每层的输出作为下一层的输入。
注意
如果你不了解矩阵乘法是如何工作的,这个网站很好地解释了这一点。
我们现在只讨论到这里 - 下一篇文章我们将深入研究这些权重和偏置在训练中是如何被纠正的!

激活函数

神经网络的层由节点组成。
激活函数应用于层,以确定哪些节点应该“触发”/“激活”。这种“触发”在人类大脑中也可以观察到,因此在神经网络中引入了激活函数,因为它们大致基于大脑的模型。
激活函数还允许网络模拟非线性数据。没有激活函数,神经网络只会是一个线性回归模型,这意味着它无法模拟大多数现实世界的数据。
有多种激活函数,但以下是最常用的几种…

Sigmoid

Sigmoid函数将输入映射到0到1之间的值,如下图所示。
在这里插入图片描述
在这里插入图片描述
x是输入向量

Relu(修正线性单元)

Relu函数只允许输入向量的正值通过。负值被映射为0。
例如,

[[-5, 10]  
 [15, -10] --> relu --> [[0, 10]
                         [15, 0]]

在这里插入图片描述
在这里插入图片描述

Tanh

Tanh与Sigmoid类似,不同之处在于它将输入映射到-1到1之间的值。
在这里插入图片描述

Softmax

Softmax接收一个输入,并将其映射为概率分布(这意味着输出中的所有值之和为1)。
在这里插入图片描述
(z是输入向量,K是输入向量的长度)

编写代码

我们的矩阵操作需要numpy…

import numpy as np

首先,让我们写我们的线性层类

class Linear:
    def __init__(self, units):
        # units指定层中有多少节点
        self.units = units
        self.initialized = False

    def __call__(self, x):
        # 如果层之前没有被调用过,初始化权重和偏置
        if not self.initialized:
            self.w = np.random.randn(self.input.shape[-1], self.units)
            self.b = np.random.randn(self.units)
            self.initialized = True

        return self.input @ self.w + self.b

示例用法

x = np.array([[0, 1]])
layer = Linear(5)
print (layer(x))

# => [[-2.63399933 -1.18289984  0.32129587  0.2903246  -0.2602642 ]]

现在,让我们按照之前给出的公式编写我们所有的激活函数类

class Sigmoid:
    def __call__(self, x):
        return 1 / (1 + np.exp(-x))

class Relu:
    def __call__(self, x):
        return np.maximum(0, x)   

class Softmax:
    def __call__(self, x):
        return np.exp(x) / np.sum(np.exp(x))   

class Tanh:
    def __call__(self, x):
        return np.tanh(x)

现在让我们编写一个“model”类,它将作为我们所有层的容器/实际的神经网络类。

class Model:
    def __init__(self, layers):
        self.layers = layers

    def __call__(self, x):
        output = x
        for layer in self.layers:
            output = layer(x)

        return output

将所有这些类保存到layer.py(或您喜欢的任何名称)中。
现在我们可以使用我们迄今为止的小型库来构建一个简单的神经网络。

import layers
import numpy as np

# 输入数组
x = np.array([[0, 1], [0, 0], [1, 1], [0, 1]])

# 网络使用我们迄今为止设计的所有层
net = layers.Model([
    layers.Linear(32),
    layers.Sigmoid(),
    layers.Linear(16),
    layers.Softmax(),
    layers.Linear(8),
    layers.Tanh(),
    layers.Linear(4),
    layers.Relu(),
])

print (net(x))
Output:
[[0.         3.87770361 0.17602662 0.        ]
 [0.         3.85640582 0.22373699 0.        ]
 [0.         3.77290517 0.2469388  0.        ]
 [0.         3.87770361 0.17602662 0.        ]]

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

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

相关文章

3.2 Beautiful Soup 的使用

目录 一、Beautiful Soup 的简介 二、解析器 三、基本使用 四、节点选择器 1 选择元素 2 获取名称、属性、文本内容 五、方法选择器 1 find_all 传入 name 节点名 传入 attrs 属性 传入 text 2 find 六、CSS 选择器 1 实例 2 获取属性 3 获取文本 七、结语 一…

TQ15EG开发板教程:运行MPSOC+AD9361

目录 1,下载工程需要使用的文件 2,编译以及修改工程 3,获取生成BOOT.BIN所需要的3个文件 3.1生成bit文件 3.2生成elf文件 3.3生成fsbl文件 4,生成boot.bin文件 5,上板测试 6,切换FMC接口 7&#…

JAVA的编译过程

1.通过使用 javac.exe 对 xxx.java文件进行编译,生成相应的 xxx.class(字节码文件) 2.使用 java.exe 对 xxx.class 进行相应解码,并将结果送给JVM(java虚拟机)中的类装载器 3. 字节码验证器会判断代码类…

Vue组件中引入jQuery

两种在vue中引入jQuery的方式 1、普通html中使用jQuery 将jQuer的文件导入到项目中&#xff0c;然后直接使用<script src"jQuery.js"></script>即可。 <script src"jQuery.js"></script> 2、vue组件中使用jQuery 安装依赖 c…

华为OD机试 - 运输时间(Java 2023 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&a…

【分明集合】特征函数、关系与运算

经典的集合论中&#xff0c;对于一个给定的集合&#xff0c;任意一个元素&#xff0c;或者属于这个集合&#xff0c;或者不属于这个集合&#xff0c;二者必居其一&#xff0c;且仅居其一&#xff0c;为了加以区分&#xff0c; 通常将这样的集合称为分明集合、经典集合或者普通集…

MySQL的事务隔离是如何实现的?

目录 从一个例子说起 快照读和当前读 事务的启动时机和读视图生成的时刻 MVCC 隐藏字段 Undo Log回滚日志 Read View - 读视图 可重复读(RC)隔离级别下的MVCC 读提交(RR)隔离级别下的MCC 关于MVCC的一些疑问 1.为什么需要 MVCC &#xff1f;如果没有 MVCC 会怎样&am…

矢量场的通量和散量

矢量与矢量场 矢量&#xff1a;又有大小又有方向的量。&#xff08;力、速度、电场强度等&#xff09; 矢量场&#xff1a;如果空间中处处都有矢量存在&#xff0c;则称形成了一个矢量场。 表示矢量场的方法&#xff1a; 1、数学表达式&#xff1a; 此表达式为直角坐标系下表…

腾讯云轻量服务器地域选择方法整理,选择不能修改!

腾讯云轻量应用服务器地域如何选择&#xff1f;地域就近选择&#xff0c;北方选北京地域、南方选广州地域&#xff0c;华东地区选上海地域。广州上海北京地域有什么区别&#xff1f;哪个好&#xff1f;区别就是城市地理位置不同&#xff0c;其他的差不多&#xff0c;不区分好坏…

全球首位AI软件工程师诞生,未来程序员会被取代吗?

今天早上看到一条消息&#xff0c;Cognition发布了世界首位AI程序员Devin&#xff0c;直接把我惊呆了&#xff0c;难道程序员是真要失业了吗&#xff1f; 全球首位AI软件工程师一亮相&#xff0c;直接引爆整个互联网圈。只需要一句指令&#xff0c;Devin就可以通过使用自己的s…

QT----基于QT的人脸考勤系统(未完成)

目录 1 编译opencv库1.1 下载源代码1.2 qt编译opencv1.3 执行Cmake一直卡着data: Download: face_landmark_model.dat 2 编译SeetaFace2代码2.1 遇到报错By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has2.2遇到报错Model missing 3 测试…

Android 13 源码编译及报错修复

下载AOSP指定分支 repo init -u git://aosp../platform/manifest -b android-13.0.0_r83 同步代码到本地 repo sync -c 初始化编译环境, 选择构建目标 source build/envsetup.sh lunch 选择需要构建的目标&#xff0c;此处以aosp_arm64-eng为例 进行固件编译 make -j12 期间编译…

蓝桥杯 填空 卡片

蓝桥杯 填空题 卡片 解题思路&#xff1a; 我们只需要消耗完卡片的个数即可。 代码示例&#xff1a; #include<bits/stdc.h> using namespace std; int a[10]; bool isEnd(){for(int i0;i<10;i){if(a[i]-1)return false;}return true; } bool getN(int x){while(x){i…

第13届软件与计算技术国际会议(ICSCT 2024)即将召开!

2024年第13届软件与计算技术国际会议(ICSCT 2024)将于7月26-28日在越南岘港召开。本次大会由维新大学主办&#xff0c;岘港大学、胡志明市科技大学联合协办。ICSCT 2024旨在为来自业界和学术界的研究人员、学者和专业人士提供一个论坛&#xff0c;分享他们最新的研究成果。欢迎…

Docker 中 MySQL 的部署与管理

目录 一、Docker 中部署 MySQL1.1 部署 MySQL1.2 进入容器并创建数据库1.3 Navicat 可视化工具连接 二、可能存在的问题2.1 1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server 参考资料 一、Docker 中部署 MySQL 1.1 部署 MySQL 首先&#xff0c;从…

详解Python中open()函数指定文件打开方式的用法

当我们用open()函数去打开文件的时候&#xff0c;有好几种打开的模式。 r->只读 w->只写&#xff0c;文件已存在则清空&#xff0c;不存在则创建。 a->追加&#xff0c;写到文件末尾 b->二进制模式,比如打开图像、音频、word文件。 ->更新(可读可写) 这个带号…

如何使用vue定义组件之——父组件调用子组件

首先&#xff0c;我们需要创建两个组件模板template&#xff1a; <template id"father"><div><h3>我是父组件</h3><h3>访问自己的数据:</h3><h3>{{ msg }}</h3></div></template><template id"…

@RequestParam、@PathVariable、@RequestBody

1、中文翻译 RequestParam-请求参数、PathVariable-路径变量、RequestBody请求体 2、作用&#xff1a; Controller中获取前端传递的参数 3、从注解本身角度分析 3.1、PathVariable&#xff1a;路径变量 通过 PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形…

论文阅读——Vision Transformer with Deformable Attention

Vision Transformer with Deformable Attention 多头自注意力公式化为&#xff1a; 第l层transformer模块公式化为&#xff1a; 在Transformer模型中简单地实现DCN是一个non-trivial的问题。在DCN中&#xff0c;特征图上的每个元素都单独学习其偏移&#xff0c;其中HWC特征图上…

2024年【危险化学品生产单位安全生产管理人员】复审考试及危险化学品生产单位安全生产管理人员模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员复审考试根据新危险化学品生产单位安全生产管理人员考试大纲要求&#xff0c;安全生产模拟考试一点通将危险化学品生产单位安全生产管理人员模拟考试试题进行汇编&#xff0c;组成…