深度学习入门笔记:第一章python入门

深度学习入门笔记:第一章python入门

笔记来源书籍:《深度学习入门:基于+Python+的理论与实现》

文章目录

  • 深度学习入门笔记:第一章python入门
    • 前言
    • 第一章python入门
    • 1.1深度学习为什么使用python?
    • 1.2python环境
    • 1.3python解释器
      • 1.3.1算术计算和数据类型
      • 1.3.2变量定义
      • 1.3.3列表
      • 1.3.4字典
      • 1.3.5布尔型
      • 1.3.6if语句
      • 1.3.7for语句
      • 1.3.8函数
    • 1.4python脚本文件
      • 1.4.1类
    • 1.5Numpy
      • 1.5.1导入Numpy
      • 1.5.2生成NumPy数组
      • 1.5.3NumPy 的算术运算
      • 1.5.4NumPy的N维数组
      • 1.5.5广播
      • 1.5.6访问元素
    • 1.6Matplotlib
      • 1.6.1绘制简单图形
      • 1.6.2pyplot的功能
      • 1.6.3显示图像

前言

对于深度学习的学习,最好的办法就是亲自实现。从零开始编写可实际运行的程序,一边看源代码,一边思考。个人认为对于编程语言的相关学习其实都离不开亲自实现,只有亲自实现才能让印象深刻,有自己的理解。在光看数学式和理论说明无法理解的情况下,可以尝试阅读源代码并运行,很多时候思路都会变得清晰起来。对数学式感到困惑时,就阅读源代码来理解技术的流程,这样的事情相信很多人都经历过。

在自己亲自实现中,会进行各种实践,你可能会因为某些问题卡住,这种费时的工作对深刻理解技术而言是宝贵的财富。

第一章python入门

1.1深度学习为什么使用python?

  • 开源,且简单、易懂、易记,对于初学者很容易上手
  • Python能够很好的处理大规模数据或者要求快速响应的情况,高性能。
  • Python拥有着 NumPy、SciPy等优秀的数值计算、统计分析库,在数据科学领域占有不可动摇的地位。
  • 深度学习的框架中也有很多使用Python的场景。

1.2python环境

使用python环境为3.x版本,在外部库方面,除了NumPy库和Matplotlib 库之外,极力避免使用其它外部库。安装成功后可在终端中使用python --version查看python版本,使用命令python进入python环境,此时可以在终端运行python代码。

NumPy是用于数值计算的库,提供了很多高级的数学算法和便利的数组(矩阵)操作方法。

Matplotlib是用来画图的库。使用Matplotlib能将实验结果可视化,并在视觉上确认深度学习运行期间的数据。

1.3python解释器

1.3.1算术计算和数据类型

除了简单的加减乘除外,**代表乘方,例如3**2代表3的二次方。在python版本中7/5所得为小数,不为整数1。

数据类型可用type()函数查看,例如type(10),结果为int类型,输出为

1.3.2变量定义

在python中,变量声明不用定义类型。Python是属于“动态类型语言”的编程语言,所谓动态,是指变量的类型是根据情况自动决定的。例如

x = 10 #变量赋值
print(x)

其中#为注释。

1.3.3列表

即数组,定义和使用方式为

 a = [1, 2, 3, 4, 5]#生成列表,不用声明类型和大小
 print(a)#输出列表内容
 len(a)#获取列表长度
 
 #访问第一个元素的值,终端可直接输出如果使用pycharm,需要使用print函数进行输出
 a[0]

Python的列表提供了切片 (slicing)这一便捷的标记法。使用切片不仅可以访问某个值,还可以访问列表的子列表(部分列表)。

a[0:2]#获取索引值为0到1(不包括2)的元素
a[1:] # 获取从索引为1的元素到最后一个元素
a[:3] # 获取从第一个元素到索引为2(不包括3)的元素
a[:-1] # 获取从第一个元素到倒数第二个元素(不包括最后一个元素)

与列表对应的还有元组,定义方式为a_tuple = (1,23,4,3,33,6,7,89),可以发现用的是括号,同时元组方法较少。

1.3.4字典

列表根据索引储存值,字典以键值对的形式储存参数。类似《新华字典》,将单词和含义对应起来,如下面例子

 me = {'height':180} # 生成字典
 print(me['height']) #访问元素,输出结果为180
 me['weight'] = 70 # 添加新元素
 print(me)#输出结果为{'height': 180, 'weight': 70}

1.3.5布尔型

Python中有bool型。bool型取True或False中的一个值。针对bool型的运算符包括and、or和not。

hungry = True 
print(type(hungry))#输出
print(not hungry)#输出False
print(hungry and sleepy)#输出false

1.3.6if语句

hungry = True
if hungry:
	print("I'm hungry")

注意python中,以缩进作为作用域,例如上面的if语句,下面的print语句缩进4个字符,即一个tab键,代表前面if条件成立时,此处代码将被执行。

1.3.7for语句

循环处理

for i in [1, 2, 3]:#按顺序访问列表中的元素
	print(i)  

1.3.8函数

使用def关键字定义函数

def hello():
	print("Hello World!")
	
hello()#调用函数,输出Hello World!

函数带参数

def hello(object):
	print("Hello " + object + "!")

hello("cat")#输出Hello cat!

python中可以使用加号拼接字符串

关闭Python解释器时,Linux或Mac OS X的情况下输入Ctrl-D(按住 Ctrl,再按D键);Windows的情况下输入Ctrl-Z,然后按Enter键。

1.4python脚本文件

一般我们都会在特定编译器运行python代码,这里讲下终端运行python文件,两步进行

  • 移动到指定目录
  • 使用python python文件运行python程序

1.4.1类

定义类创建属于自己的数据类型,使用class关键字。定义类要遵循下面模板

class 类名:
 def __init__(self, 参数, …): # 构造函数
 ...
 def 方法名1(self, 参数, …): # 方法1
 ...
 def 方法名2(self, 参数, …): # 方法2
 ...

这里有一个特殊的__ init __方法,这是进行初始化的方法,也称为构造函数(constructor),只在生成类的实例时被调用一次。此外,在方法的第一 个参数中明确地写入表示自身(自身的实例)的self是Python的一个特点.举个例子

class Calculator:
    def __init__(self,num1,num2):
        self.num1=num1
        self.num2=num2
        self.add();
    def add(self):
        c = self.num1 + self.num2
        print(c)
    def devide(self,x,y):
        c = x/y
        print(c)
calcul=Calculator(1,2)#获取类实例,这里会输出3,因为实例化时__init__方法会调用
calcul.devide(4,2)#输出2.0

类Calculator的构造函数(初始化方法)会接收参数num1,num2,然后用这个参数初始化实例变量self.num1和self.num2。实例变量是存储在各个实例中的变量。Python的类中可以像self.num1这样,通过在self后面添加属性名来生成或访问实例变量.

1.5Numpy

1.5.1导入Numpy

python中使用import导入库,

import numpy as np

上面语句直译为“将numpy作为np导入”,后续numpy的方法可以通过np来调用。

1.5.2生成NumPy数组

使用np.array()方法,接受python的列表作为参数,生成NumPy数组。一维数组在数学上也称为向量。

>>> x = np.array([1.0, 2.0, 3.0])
>>> print(x)
[ 1. 2. 3.]
>>> type(x)

1.5.3NumPy 的算术运算

可以使用NumPy数组进行算术运算。

>>> x = np.array([1.0, 2.0, 3.0])
>>> y = np.array([2.0, 4.0, 6.0])
>>> x + y # 对应元素的加法
array([ 3., 6., 9.])
>>> x - y
array([ -1., -2., -3.])
>>> x * y # element-wise product,对应元素运算
array([ 2., 8., 18.])

注意:如果元素个数不同,程序就会报错,所以元素个数保持一致非常重要(维度可以不同,具体看后面的广播功能)。

NumPy也可对单一数值进行运算

>>> x = np.array([1.0, 2.0, 3.0])
>>> x / 2.0
array([ 0.5, 1. , 1.5])

这个功能称为广播

1.5.4NumPy的N维数组

多维数组(也称矩阵)生成

>>> A = np.array([[1, 2], [3, 4]])
>>> print(A)
[[1 2]
 [3 4]]
>>> A.shape
(2, 2)
>>> A.dtype
dtype('int64')

shape方法返回数组形状,dtype方法返回类型。矩阵的运算方法与一维数组相同。

注意:数学上将一维数组称为向量, 将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量(tensor)。

1.5.5广播

NumPy中,形状不同的数组也可进行运算,这个功能称为广播。

上面例子中我们已经知道数组能与标量2.0进行计算,此时标量2.0被扩展为1*3的数组,此外,还可以不同维度的数组进行运算,例如下图

深度学习入门笔记:第一章python入门_第1张图片

1.5.6访问元素

元素索引从0开始,访问方法如下

>>> X = np.array([[51, 55], [14, 19], [0, 4]])
>>> print(X)
[[51 55]
 [14 19]
 [ 0 4]]
>>> X[0] # 第0行
array([51, 55])
>>> X[0][1] # (0,1)的元素
55

for语句访问各个元素

>>> for row in X:
... print(row)
...
[51 55]
[14 19]
[0 4]

NumPy还可以使用数组访问各个元素

>>> X = X.flatten() # 将X转换为一维数组
>>> print(X)
[51 55 14 19 0 4]
>>> X[np.array([0, 2, 4])] # 获取索引为0、2、4的元素
array([51, 14, 0])

运用这个标记法可以获取满足条件的数组元素。

>>> X > 15
array([ True, True, False, True, False, False], dtype=bool)
>>> X[X>15]
array([51, 55, 19])

对NumPy数组使用不等号运算符等(上例中是X > 15),结果会得到一个 布尔型的数组。上例中就是使用这个布尔型数组取出了数组的各个元素(取出True对应的元素)。

Python等动态类型语言一般比C和C++等静态类型语言(编译型语言) 运算速度慢。实际上,如果是运算量大的处理对象,用 C/C++写程 序更好。为此,当 Python中追求性能时,人们会用 C/C++来实现 处理的内容。Python则承担“中间人”的角色,负责调用那些用 C/ C++写的程序。NumPy中,主要的处理也都是通过C或C++实现的。 因此,我们可以在不损失性能的情况下,使用 Python便利的语法

1.6Matplotlib

Matplotlib 是用于绘制图形的库,使用Matplotlib可以轻松地绘制图形和实现数据的可视化。

1.6.1绘制简单图形

用matplotlib的pyplot模块绘制图形。在绘制图形之前需要导入两个包

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.show()
  • NumPy的arange方法生成了[0, 0.1, 0.2, …, 5.8, 5.9]的 数据,将其设为x。
  • np.sin(x)根据x数据绘制图形sin
  • plt.plot(x,y),以x数据作为x轴,y = sin(x)为y轴,绘制图形
  • plt.show(),展示图形

输出结果为

深度学习入门笔记:第一章python入门_第2张图片

1.6.2pyplot的功能

我们在上面例子的图形上追加cos图形,并添加标题和给x轴标签名等。

#生成数据
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")#x轴标签
plt.ylabel("y")#y轴标签
plt.title('sin & cos')#标题

plt.legend()#显示label内容
plt.show()

输出图形为

深度学习入门笔记:第一章python入门_第3张图片

1.6.3显示图像

pyplot 中还提供了用于显示图像的方法 imshow()。另外,可以使用 matplotlib.image模块的imread()方法读入图像。

导入包

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

读入图像

img = imread('lena.png') # 读入图像(设定合适的路径!)
plt.imshow(img)
plt.show()

输出如图

深度学习入门笔记:第一章python入门_第4张图片 how()`。另外,可以使用 matplotlib.image模块的`imread()`方法读入图像。

导入包

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

读入图像

img = imread('lena.png') # 读入图像(设定合适的路径!)
plt.imshow(img)
plt.show()

输出如图

深度学习入门笔记:第一章python入门_第5张图片

你可能感兴趣的:(深度学习,python,深度学习,笔记)