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的维数永远是
- 二者之间的转化,array转matrix用np.asmatrix或者np.matrix,matrix转array用np.asarray或者matrix的A属性
- 行向量或者列向量对应的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两个取值
- 0 对应“不传递信号”
- 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)
- 与门真值表:
x1 | x2 | y |
---|---|---|
1 | 1 | 1 |
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
与门仅在两个输入( x_1,x_2 )均为 1 时输出 1 ,其他时候则输出 0 .
- 与非门(NAND gate)
- 与非门真值表:
x1 | x2 | y |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
颠倒了与门的输出,即仅当 x_1 和 x_2 同时为 1 时输出 0 ,其他时候则输出 1 .
- 或门(OR gate)
x1 | x2 | y |
---|---|---|
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
1 | 1 | 1 |
以上三种基本电路只有参数的值(权重 \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)——感知机的局限性
异或门也被称为逻辑异或电路,而单层感知机无法表示异或门.
- 异或门的真值表
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
仅当 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必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。