基于Python从零开始的深度学习

Python基础

  • Python是一种开源的、简单易记、可以自由使用编程语言。
  • 深度学习将使用NumPy和Matplotlib这两种外部库
  • Python有“解释器”和“脚本文件”两种运行模式
  • Python能够将一系列处理集成为函数或类等模块
  • NumPy中有很多用于操作多维数组的便捷方法

类与对象

变量是挂在对象身上的标签

class Man:     
#定义了一个新类Man,类Man生成了实例(对象)m
#类Man的构造函数(初始化方法会接收参数name)
#参数name初始化实例变量self.name(实例变量是存储在各个实例中的变量)
    def __init__(self, name):  
        self.name = name    #通过在self后面添加属性名来生成或访问实例变量
        print('Initialized!')

    def hello(self):
        print("Hello" + self.name +'!')

    def goodbye(self):
        print('Good-bye' + self.name + '!')

m = Man('David')
m.hello()
m.goodbye()        

NumPy

import numpy as np
  • NumPy的 N 维数组(矩阵)
A = np.array([1,2] , [3,4])
A.array()    #查看矩阵的形状
A = np.dtype()    #查看矩阵元素的数据类型
  • 数组和矩阵的计算工具
  • 关于array类型和matrix类型

Numpy中两大重要类型array类型(N维数组ndarray)和矩阵类型matrix是很多基于Numpy数值计算的基础;

Numpy中最重要的数据结构就是ndarry,简写为array, 即N维数组;matrix也是一种array,只不过是维数为2的特殊array,matrix的维数是固定的,这点和一般array显著不同

即便加减乘除各种运算,matrix的维数不会发生变化,而array在运算时特别是归约时维数会发生变化,一句话,matrix的维数永远是

  1. 二者之间的转化,array转matrix用np.asmatrix或者np.matrix,matrix转array用np.asarray或者matrix的A属性
  2. 行向量或者列向量对应的array和matrix的实际维数
  • 广播(broadcast)

在np乘法中,标量被当作是由相同元素组成的的 N 维数组,以便进行和数组进行算术运算

广播的例子:标量10被当作2 × 2的矩阵

  • 访问元素
X = np.array([51,55], [14,19], [0,4])

X[0]	#访问第0行元素 -> OUTPUT:array([51,55])

X[0][1]	#访问(0,1)元素 -> OUTPUT:55

#遍历数组中的元素
for row in X:
    print(row)

X = X.flatten()#将X转换为一维数组 - > OUTPUT:[51 55 14 19 0 4]

Matplotilb

import numpy as np
import matplotlib.pyplot as plt
  • 绘制sin函数曲线
#生成数据
x = np.arange(0, 6, 0.1)  #以0.1为单位,生成0到6的数据
y = np.sin(x)

#绘制图形
plt.plot(x, y)

plt.xlabel("在此处输入x轴标签")
plt.ylabel("在此处输入y轴标签")
plt.title("在此处输入图像标题")

plt.show()

感知机(perceptron)

  • 感知机接收多个输入信号,输出一个信号;
  • 感知机的信号只有1/0两个取值
  1. 0 对应“不传递信号”
  2. 1 对应"传递信号"

有两个输入的感知机

输入信号前往神经元的传输过程中会乘以固定的权重( \omega_1x_1,\omega_2x_2 );只有当输入信号的总和超过阀值 \theta 后,才会输出 1 .

即 y=\begin{cases} 0\ (\omega_1x_1+\omega_2x_2\leq\theta)\\ 1\ (\omega_1x_1+\omega_2x_2>\theta) \end{cases},

令 \theta= -b,

\Rightarrow y=\begin{cases} 0\ (b+\omega_1x_1+\omega_2x_2\leq0)\\ 1\ (b+\omega_1x_1+\omega_2x_2>0) \end{cases}

其中,b被称作偏置.

简单逻辑电路

  • 与门(AND gate)

  • 与非门(NAND gate)

  • 或门(OR gate)

  • 与门(AND gate)

- 与门真值表:

x1x2y
111
000
100
010

与门仅在两个输入( x_1,x_2 )均为 1 时输出 1 ,其他时候则输出 0 .

  • 与非门(NAND gate)

- 与非门真值表:

x1x2y
001
011
101
110

颠倒了与门的输出,即仅当 x_1 和 x_2 同时为 1 时输出 0 ,其他时候则输出 1 .

  • 或门(OR gate)
x1x2y
101
011
000
111

以上三种基本电路只有参数的值(权重 \omega 和阈值 \theta )不同可以用通过调整参数的值改变电路的类型,因此都可以用感知机实现.

Python实现简单逻辑电路

  • 与门(仅当输入均为1才输出1)
def AND(x1, x2):    定义一个接收参数x1和x2的AND函数
    w1, w2, theta = 0.5, 0.5 0.7    #在函数内初始化w1,w2,theta
    tmd = x1*w1 + x2*w2
    if tmd <= theta:
        return 0
    elif tmd > theta:
        return 1
#当输入的加权总和超过阀值时返回1,否则返回0

- 导入权重和配置

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

多层感知机(multi-layered perceptron)

  • 异或门无法通过单层感知机来表示
  • 使用2层感知机可以表示异或门
  • 单层感知机只能表示线性空间,而多层感知机可以表示非线性空间
  • 多层感知机(在理论上)可以表示计算

异或门(XOR gate)——感知机的局限性

异或门也被称为逻辑异或电路,而单层感知机无法表示异或门.

- 异或门的真值表

x1x2y
000
110
101
011

仅当 x_1 或 x_2 中的一方为 1时,才会输出 1 .

简单逻辑电路组合

import numpy as np

根据之前定义的门:

  • OR
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = -0.1
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
  • AND
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 XOR(x1, x2):
    s1 = OR(x1, x2)
    s2 = AND(s1, s2)
    return y

通过叠加层(加深层),感知机能更加灵活的表示.


坏消息:感知机必需人工设定权重参数

好消息:神经网络不用,可以自动从数据中学习到合适的权重参数


神经网络

我们可以通过分析神经网络与感知机的不同来学习它,即基于感知机的构造来认识神经网络.

激活函数(activation function)

已经学习过,感知机原理的数学表达为: y=\omega_1x_1+\omega_2x_2+b,

引入新函数 h(x), 将其改写为 y=h(\omega_1x_1+\omega_2x_2+b)=h(x),

由此, y=\begin{cases} 0\ (b+\omega_1x_1+\omega_2x_2\leq0)\\ 1\ (b+\omega_1x_1+\omega_2x_2>0) \end{cases} 即可改写为:

y= \begin{cases} 0\ (x\leq0)\\ 1\ (x>0) \end{cases}.

激活函数的计算过程

阶跃函数

- 简单实现

def step_function(x):
    if x >0:
        return 1
    else:
        return 0

- NumPy数组实现

import numpy as np
def step_funtion(x):
    y = x > 0
    return y.astype(np.int)
  • sigmoid函数

神经网络中用sigmoid函数作为激活函数,进行信号的转换,转换后的信号被传送给下一个神经元.

- 公式表达: h(x)=\frac{1}{1+\exp(-x)}


未完待续.

以上就是“基于Python从零开始的深度学习”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值