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

一 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值