深度学习入门Day2--鱼书学习(1)

article/2025/6/7 12:48:11

前言:《深度学习入门,基于python的理论与实现》是非常好的一本书,封面有一条鱼。
作者是斋藤康毅,东京工业大学毕业,并完成东京大学研究生院课程。现从事计算机视觉与机器学习相关的研究和开发工作。
本系列为该书的学习笔记。


一、感知机

作者提到,感知机也是神经网络(深度学习)的起源算法。所以学习感知机是学习深度学习的重要思想。

1.考虑这样一个感知机

在这里插入图片描述

  • x1,x2是输入信号,y是输出信号。w1,w2是权重,b是偏置。
    w 1 x 1 + w 2 x 2 + b w_{1}x_{1}+w_{2}x_{2}+b w1x1+w2x2+b之和超过某个界限,也就是阈值的时候,神经元被激活。
  • 权重:控制信号流动难度,值越大,通过的信号越大
  • 偏置:调整神经元被激活的容易程度。

2.感知机的局限性

它只能表示一条直线分割的空间,也就是线性空间,无法表示更复杂的曲线分割的非线性空间
但是如果是多层感知机,也就是再叠加一层,甚至更多层,就可以做到表示非线性空间。

二、神经网络基础

  • 相比于刚刚感知机,需要人为设置权重,神经网络的引入就是解放我们的双手,因为神经网络可以自动从数据中学习合适的权重。

在这里插入图片描述

  • 隐藏层的含义是它的神经元肉眼看不见(和输入输出层不一样)。
    鱼书根据实际上拥有权重的层数来表示网络的名称。比如上图,看似由3层神经元组成,实际上只有2层神经元有权重。所以称作“2层网络”。

1.激活函数

a = b + w 1 x 1 + w 2 x 2 (2.1) a = b + w_{1} x_{1} + w_{2} x_{2} \tag{2.1} a=b+w1x1+w2x2(2.1)
y = h ( a ) (2.2) y=h(a)\tag{2.2} y=h(a)(2.2)
首先,(2.1)计算加权输入信号和偏置的总和,记为 a a a。然后式子(2.2)用h()函数把 a a a转换为输出 y y y
h ( x ) h(x) h(x)会把输入信号的总和转换为输出信号。这种函数一般就称为激活函数。他的作用在于决定如何来激活输入信号的总和。
在这里插入图片描述
a a a表示输入信号的总和, h ( ) h() h()表示激活函数, y y y表示输出。
神经网络的激活函数必须是非线性函数,否则加深神经网络层数将没有任何意义

1.1 阶跃函数

以阈值为界限,一旦超过阈值,就切换输出。

阶跃函数(Step Function)
将输入转换为二值输出:当x > 0时输出1,否则输出0参数:x: 输入值,可以是标量、列表或NumPy数组返回:与x形状相同的NumPy数组,元素为0或1
import numpy as np
import matplotlib.pyplot as plt
def step_function(x):return np.array(x>0)
x=np.arange(-5.0,5.0,0.1)#从-5到5,间隔0.1
y=step_function(x)
plt.plot(x,y)
plt.ylim(-0/1,1.1)#指定y轴范围
plt.show()

在这里插入图片描述

1.2 sigmoid函数

h ( x ) = 1 1 + e − x (2.3) \ h(x) = \frac{1}{1 + e^{-x}} \tag{2.3}  h(x)=1+ex1(2.3)

Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。 在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的激活函数,将变量映射到0,1之间。----------------“引自百度百科”

我们使用python绘制该曲线。
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
# 定义Sigmoid函数
def sigmoid(x):return 1 / (1 + np.exp(-x))
# 生成x轴数据(从-10到10,间隔0.1)
x = np.arange(-10, 10,0.1)  
y = sigmoid(x)
plt.plot(x, y, label=r"$\ h(x) = \frac{1}{1 + e^{-x}}$", color='blue', linewidth=2)
plt.xlabel("x", fontsize=12)
plt.ylabel("h(x)", fontsize=12)
plt.legend(fontsize=12)  # 显示图例
plt.show()
1.3 sigmoid函数和阶跃函数的比较
  • 平滑性:sigmoid函数是一条平滑的曲线。阶跃函数以0为界,输出发出急剧性的变化。
  • 输出:输入越小输出越接近0,输入越大输出越接近1。且不管输入信号为多少,输出信号的值都在0到1之间。
  • 都是非线性函数: 何为线性函数,指的是输出值是输入值的常数倍的函数。( h ( x ) = c x h(x)=cx h(x)=cx)。因此非线性函数指的是不像线性函数那样呈现出一条直线的函数。
1.4 ReLU函数

比较常用的一种激活函数,输入大于0时,直接输出该值;输入小于等于0时,输出0.
h ( x ) = { x , x > 0 0 , x ≤ 0 h(x) = \begin{cases} x, & x > 0 \\0, & x \leq 0 \end{cases} h(x)={x,0,x>0x0
使用Python绘制图像

import numpy as np
import matplotlib.pyplot as plt
def relux(x):return np.maximum(0, x)#取最大值返回
x=np.arange(-6,6,0.1)
y=relux(x)
plt.plot(x,y)
plt.title('relux')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

在这里插入图片描述

2 多维矩阵运算

2.1多维数组

详细内容可见上一篇Python基础。

import numpy as np
list1=[1,2,3]
list2=[4,5,6]
list3=[7,8,9]
list4=[10,11,12]
A=np.array(list1)#一维
B=np.array([list1,list2])#二维
C=np.array([[list1,list2],[list3,list4]])#三维
print("A.dim=",np.ndim(A))#A的维数
print("A.shape=",A.shape)#表示A的形状
print("A.shape[0]=",A.shape[0])#表示 A 的第 0 个维度的大小,即 3。print("B.dim=",np.ndim(B))#A的维数
print("B.shape=",B.shape)#表示A的形状
print("B.shape[0]=",B.shape[0])#表示 A 的第 0 个维度的大小,即 3。print("C.dim=",np.ndim(C))#A的维数
print("C.shape=",C.shape)#表示A的形状
print("C.shape[0]=",C.shape[0])#表示 A 的第 0 个维度的大小,即 3。

输出结果:
A.dim= 1
A.shape= (3,)
A.shape[0]= 3
B.dim= 2
B.shape= (2, 3)
B.shape[0]= 2
C.dim= 3
C.shape= (2, 2, 3)
C.shape[0]= 2

A、B、C各是一维、二维、三维数组。
我其实有个比较不靠谱的区分法,看array()里面有几个嵌套 [],一层就是一维,两层就是二维,以此类推。
注意这里A.shape的结果是个元组(tuple)。

2.2 矩阵乘法

回顾线性代数所学内容即可。
A B = C AB=C AB=C
A的列数和B的行数相同。如果A是 n ∗ m n*m nm,B是 m ∗ k m*k mk,那么C是 n ∗ k n*k nk

下面用Python实现矩阵的乘法,需要用到np.dot()这个函数。
乘积也叫做点积

输入类型np.dot(a, b) 行为
两个一维数组向量内积(返回标量)
两个二维数组矩阵乘法
高维数组张量收缩(沿最后一个轴和倒数第二个轴计算)
标量 × 数组报错(应使用 a * b 进行逐元素乘法)
A=np.array([1,2,3])
B=np.array([[1,2,3],[4,5,6],[7,8,9]])
C=np.dot(A,B)
print(C)

结果

[30 36 42]
通过使用np.dot(多维数组的点积),可以一次性计算出C的结果,哪怕C的元素有一千个,也可以一次运算得出。


http://www.hkcw.cn/article/uJbrllXUmp.shtml

相关文章

windows安装和部署docker

Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖打包成轻量级的容器进行部署。 安装部署参考文章链接:https://blog.csdn.net/weixin_57972634/article/details/147032466 启用虚拟化功能 官网下载docker 官网下载docker地址&#xff1a…

Windows【基础操作2】

目录 前言: 一、Windows用户 二、用户分类和管理 1.用户分类 2.用户管理 总结: 前言: 回顾上一篇windows 我讲了关于磁盘的知识 小萌新们都明白了吗? 没明白的可以评论告诉我 我会的话会为你们解答的 好 话不多说 下面是…

unity UI Rect Transform“高”性能写法

🎯 Unity UI 性能优化终极指南 — RectTransform篇 🧩 RectTransform 是什么? Unity UI中每一个UI元素的必备组件继承自 Transform,但专门用于 2D 布局负责定义UI的位置、大小、锚点、旋转、缩放 ⚠️ 特别注意:所有…

登录vmware vcenter报vSphere Client service has stopped working错误

一、问题 登录vmware vcenter时发现报vSphere Client service has stopped working错误,导致vcenter控制台进不去 二、解决办法 打开vmware vcenter管理https://vcenterIP:5480,选择VMware vSphere Client,重启该服务后恢复正常。

MicroPython+ESP32 连接接WIFI

在使用ESP32连接热点前,需要先使用手机或者电脑打开一个热点,并设置为2.4频段G的,如下图所示。 ESP32连接wifi热点官方示例 import networkwlan network.WLAN() # create station interface (the default, see below for an access p…

算法题(160):64位整数除法

审题: 本题需要我们计算出数量级巨大的(a*b)%p的值,其中a,b,p的数据类型都是longlong 思路: 方法一:暴力解法 我们可以直接计算a*b的结果,然后再取余p。但是由于他们的数量级过高,计算时空间可能会溢出&…

在图像分析算法部署中应对流行趋势的变化|文献速递-深度学习医疗AI最新文献

Title 题目 Navigating prevalence shifts in image analysis algorithm deployment 在图像分析算法部署中应对流行趋势的变化 01 文献速递介绍 机器学习(ML)已开始革新成像研究与实践的诸多领域。然而,医学图像分析领域存在显著的转化鸿…

RTP over TCP 模式

RTP over TCP 模式概述 RTP over TCP 指的是将RTP数据包封装在TCP连接中进行传输,而不是使用传统的基于UDP的传输方式。 与UDP模式对比 特性RTP over TCPRTP over UDP端口数量仅需 1 个 TCP 端口(默认 554)每路流需 2 个 UDP 端口&#xf…

智启未来:AI重构制造业供应链的五大革命性突破

一、需求预测:让供应链“未卜先知” 1.1 从经验判断到数据预言 传统供应链依赖人工分析历史数据,但面对市场波动、设备突发故障等不确定性,往往反应滞后。AI通过整合工业物联网(IIoT)传感器数据、生产排程、供应商交…

【文献精读】Explaining grokking through circuit efficiency

abstract 神经网络泛化中最神奇的现象之一是grokking:一个具有完美训练accuracy但泛化能力差的网络,在进一步的训练后,会过渡到完美的泛化。 本文提出,当任务存在一个泛化解和一个记忆解时,就会发生泛化。其中泛化解学…

JVM简介

JAVA内存模型 以下是关于 Java内存模型(JMM) 的核心要点总结: 一、JMM的核心作用 Java内存模型是 **多线程环境下内存访问的规范**,主要解决以下问题: 可见性:线程对共享变量的修改对其他线程立即可见&am…

蓝桥杯 k倍区间

题目描述 给定一个长度为 N 的数列,A1,A2,⋯AN,如果其中一段连续的子序列 Ai,Ai1,⋯Aj ( i≤j ) 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。 你能求出数列中总共有多少个 K 倍区间吗? 输入描述 第一行包含两个整数…

linux批量创建文件

文章目录 批量创建空文件touch命令批量创建空文件循环结构创建 创建含内容文件echo重定向多行内容写入 按日期创建日志文件根据文件中的列内容,创建文件一行只有一列内容一行有多列内容 批量创建空文件 touch命令批量创建空文件 # 创建文件file1.txt到file10.txt …

[蓝桥杯]高僧斗法

高僧斗法 题目描述 古时丧葬活动中经常请高僧做法事。仪式结束后,有时会有"高僧斗法"的趣味节目,以舒缓压抑的气氛。 节目大略步骤为:先用粮食(一般是稻米)在地上"画"出若干级台阶(…

C++语法系列之类型转换

前言 类型转换是经常存在的情况,类型转换分为隐式类型转化 和 显式类型转化 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败 double i 3.3; int b i; //隐式类型转化 double -> intC搞出来了四种强制类…

Python----循环神经网络(BiLSTM:双向长短时记忆网络)

一、LSTM 与 BiLSTM对比 1.1、LSTM LSTM(长短期记忆网络) 是一种改进的循环神经网络(RNN),专门解决传统RNN难以学习长期依赖的问题。它通过遗忘门、输入门和输出门来控制信息的流动,保留重要信息并丢弃无关…

工作自动化——工作自动提炼--智能编程——仙盟创梦IDE

工作自动化中的自动提炼、自动比对代码生成日志,为软件开发与项目管理带来诸多好处。 自动提炼能从复杂代码中精准提取关键信息,节省人工梳理时间,开发人员可快速把握核心逻辑,加速项目熟悉进程。自动比对代码则及时发现版本间差异…

运行shell脚本时报错/bin/bash^M: 解释器错误: 没有那个文件或目录

Windows的换行符为\r\n,而linux换行符为\n。先查看一下文件是什么格式的 :set ff --查询一下格式是什么 由于使用nodepad新建的脚本,首选项中格式设置成了windows,上传到linux中报错。 解决方法 1、nodepad中【设置》首选项】修改为unix&am…

6. 基础IO

0.背景 a.访问一个文件,都必须先把对应的文件打开(打开文件就是把它从磁盘加载到内存中) b.如果一个文件,压根就没有被打开,那么它就在磁盘上 c.谁来打开??用户通过bash,启动进程…

碰一碰发视频-源码系统开发技术分享

#碰一碰营销系统# #碰一碰系统# #碰一碰发视频# 架构设计哲学&#xff1a;近场通信的优雅平衡 一、核心通信技术选型 1. 双模协同传输引擎 技术协议栈延迟控制适用场景NFCISO 14443-A<100ms精准触发场景BLE 5.0GATT Profile300-500ms中距传输场景 工程决策依据&…