深度学习——从入门到入坟,一篇文章理论结合实践带你掌握深度学习基本知识

一 Python入门

1.1 NumPy

在深度学习的实现中,经常出现数组和矩阵的计算。NumPy的数组类中提供了很多便捷的方法。实践内容如下:

  • 导入NumPy库
  • 生成NumPy数组
  • NumPy的算术运算
  • 广播
  • 访问元素
import numpy as np

x = np.array([1, 2, 3])
y = np.array([[0, 1, 0],
              [1, 2, 1],
              [0, 2, 1]])
print(x)
print(y)
z = x * y
print(z)
i = 10
q = y * i
print(q)
print(x[0])
[1 2 3]
[[0 1 0]
 [1 2 1]
 [0 2 1]]
[[0 2 0]
 [1 4 3]
 [0 4 3]]
[[ 0 10  0]
 [10 20 10]
 [ 0 20 10]]
1

1.2 Matplotlib

在深度学习的实现中,图形的绘制和可视化非常重要。Matplotlib是用于绘制图形的库,使用Matplotlib.pyplot可以轻松绘制图形并实现数据的可视化。实践内容如下:

  • 绘制sin&cos函数图像
  • pyplot的其它功能
  • 显示图像
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.arange(0, 6, 0.1)  # 以0.1为单位,生成0到6的数据
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制图形
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle="--", label="cos")
plt.xlabel("x")
plt.ylabel("y")
plt.title("sin & cos")
plt.legend()
plt.show()

图1 sin&cos

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.image import imread

img = imread('dataset\\lena.png')
plt.imshow(img)
plt.show()

图2 lena

二 感知机

2.1 感知机简介

感知机接收多个信号,输出一个信号,输入信号被送往感知机时,会被分别乘以固定的权重,感知机计算传送过来的信号总和,当总和超过一个界限值(阈值)时,感知机输出信号1(传递信号)。
y = { 0 if  w 1 x 1 + w 2 x 2 < θ 1 if  w 1 x 1 + w 2 x 2 ≥ θ y = \begin{cases} 0 & \text{if } w_{1}x_{1}+w_{2}x_{2} < \theta \\ 1 & \text{if } w_{1}x_{1}+w_{2}x_{2} \geq \theta \end{cases} y={ 01if w1x1+w2x2<θif w1x1+w2x2θ

其中 y y y代表输出信号, x 1 , x 2 x_{1},x_{2} x1,x2分别代表两个输入信号, w 1 , w 2 w_{1},w_{2} w1,w2为输入信号的权重, θ \theta θ为阈值。

2.2 简单逻辑电路

通过编写函数实现简单逻辑电路中的与门、非门、与非门、或门。

import numpy as np


# 与门
def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
# 非门
def NOT(x1):
    b = 0.7
    tmp = -x1+b
    if tmp <= 0:
        return 0
    else:
        return 1
# 与非门
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
# 或门
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    else:
        return 1


对于感知机而言,异或门无法直接表示,但是感知机可以通过“叠加层”来表示异或门,通过叠加的方法,利用已有的与门、或门和非门,可以巧妙地实现异或门。
# 异或门
def XOR(x1, x2):
    x_n1 = NOT(x1)
    x_n2 = NOT(x2)
    x3 = AND(x2, x_n1)
    x4 = AND(x1, x_n2)
    tmp = OR(x3, x4)
    return tmp

print(XOR(1, 1))

Plus:异或门的实现可能会有不同方法,在此列举的为本人在Turing Complete上实现的方法。

三 神经网络

3.1 阶跃函数

在第二节感知机中我们了解到:当输入信号的加权和达到阈值时,输出信号将被激活。这时,将阈值移项不等式左边,令 b = − θ b=-\theta b=θ,记 b b b为偏置,令 a = b + w 1 x 1 + w 2 x 2 a=b+w_{1}x_{1}+w_{2}x_{2} a=b+w1x1+w2x2,则有阶跃函数:
y = { 0 if  a < 0 1 if  a ≥ 0 y = \begin{cases} 0 & \text{if } a < 0 \\ 1 & \text{if } a \geq 0 \end{cases} y={ 01if a<0if a0

import numpy as np
import matplotlib.pyplot as plt

def step_function(a):
    return np.array(a > 0, dtype=int)

x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)  # 指定y轴的范围
plt.show()

图3 阶跃函数

3.2 sigmoid激活函数

y = h ( a ) y=h(a) y=h(a),称 h ( ) h() h()为激活函数, a a a为自变量参数。对于神经网络中常用的激活函数 s i g m o i d sigmoid sigmoid而言,其激活函数表达式为:
h ( x ) = 1 1 + e x p ( − x ) h(x)=\frac{1}{1+exp(-x)} h(x)=1+exp(x)1

def sigmoid(a):
    return 1 / (1 + np.exp(-a))


x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)  # 指定y轴的范围
plt.show()

图4 sigmoid函数

3.3 softmax函数

分类问题中使用的softmax函数可以用下式表示:
y = e x p ( a k ) ∑ i = 1 n e x p ( a i ) y=\frac{exp(a_{k})}{\sum\limits_{i=1}^{n}exp(a_{i})} y=i=1

1. 基础概念 汇编语言是一种低级语言,它是计算机硬件指令的助记符。汇编语言直接反映了计算机的硬件结构,可以直接操作计算机的硬件资源。 汇编语言的基本单位是汇编指令,它由操作码和操作数两部分组成。操作码表示要执行的操作,操作数表示操作的对象或数据。 汇编语言的程序由若干条汇编指令组成,程序的执行顺序由程序中的指令顺序决定。 2. 寄存器 寄存器是计算机中用来暂时存储数据的高速存储器件,是汇编语言中最常用的数据存储方式。 常用的寄存器有通用寄存器、段寄存器、指针寄存器、标志寄存器等。 通用寄存器包括AX、BX、CX、DX等,可以用来存储数据、地址、偏移量等。 段寄存器包括CS、DS、SS、ES等,用来存储段地址。 指针寄存器包括SP、BP、SI、DI等,用来存储栈指针、基址指针、源地址指针、目的地址指针等。 标志寄存器包括CF、PF、AF、ZF、SF、OF等,用来存储运算结果的状态信息。 3. 指令集 汇编语言的指令集包括数据传送指令、算术指令、逻辑指令、比较指令、跳转指令、循环指令等。 数据传送指令用来把数据从一个地方传送到另一个地方,包括MOV、XCHG、LEA等。 算术指令用来进行加、减、乘、除等运算,包括ADD、SUB、MUL、DIV等。 逻辑指令用来进行位运算,包括AND、OR、NOT、XOR等。 比较指令用来比较两个数据的大小关系,包括CMP、TEST等。 跳转指令用来改变程序的执行顺序,包括JMP、JZ、JNZ、JE、JNE等。 循环指令用来重复执行一段程序,包括LOOP、LOOPE、LOOPZ、LOOPNE、LOOPNZ等。 4. 程序设计 汇编语言的程序设计需要掌握一定的技巧和方法,包括程序的结构、数据的处理、流程控制等。 程序的结构包括程序的头部、数据段、代码段、堆栈段等。 数据的处理包括数据类型、数据的存储和读取、数据的转换等。 流程控制包括条件判断、循环控制、函数调用等。 5. 汇编器和调试器 汇编器是将汇编语言程序翻译成机器语言程序的工具,可以将汇编语言程序转换成目标代码或可执行文件。 调试器是用来调试程序的工具,可以帮助程序员查找程序中的错误、调试程序的执行流程等。 6. 总结 学习汇编语言需要掌握基本概念、寄存器、指令集、程序设计、汇编器和调试器等知识,需要进行大量的实践和练习,才能掌握汇编语言的编程技巧和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值