欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 Python之深度学习入门

程序员文章站 2022-10-04 09:44:55
1、Python语言的特点:是一个简单、易读、易记的编程语言,而且是开源的,可以*使用,可以用类似英语的语法编写程序,编译起来并不费力,此外,Python不仅可以写出可读性高的代码,还可以写出性能高(处理速度快)的代码,在需要处理大规模数据或者要求快速响应的情况下可以稳妥完成。2、学习深度学习主要使用的外部库是NumPy库(用于数值计算的库,提供了很多高级的数学算法和便利的数组、矩阵操作方法)和Matplotlib库(用于画图的库,能将实验结果可视化,并在视觉上确认深度学习运行期间的数据),可以有效地促...

1、Python语言的特点:是一个简单、易读、易记的编程语言,而且是开源的,可以*使用,可以用类似英语的语法编写程序,编译起来并不费力,此外,Python不仅可以写出可读性高的代码,还可以写出性能高(处理速度快)的代码,在需要处理大规模数据或者要求快速响应的情况下可以稳妥完成。

2、学习深度学习主要使用的外部库是NumPy库(用于数值计算的库,提供了很多高级的数学算法和便利的数组、矩阵操作方法)和Matplotlib库(用于画图的库,能将实验结果可视化,并在视觉上确认深度学习运行期间的数据),可以有效地促进深度学习的实现,尽量避免使用外部库。

3、Python解释器:被称为“对话模式”,用户能够以和Python对话方式进行编程,知识点如下:

  • 算术计算——加减法和乘除法等算数计算,可以按照直接输入的形式计算,如:1-2,4*5,7/5等,*表示乘法,/表示除法,**表示乘方,在Python3.x中,整数除以整数的结果是浮点数,而在Python2.x中整数除以整数的结果是整数;
  • 数据类型——表示数据的性质,有整数、浮点数、字符串等类型,使用type()函数可以查看数据类型,字符串的拼接可以使用“+”;
  • 变量——使用x或y等字母进行定义,此外可以对变量进行赋值或进行计算,Python属于“动态类型语言”的编程语言,动态指得是变量类型根据情况自动决定,“#”是注释,后面的文字被自动忽略;
  • 列表——除了单一数值,可以用列表(数组)汇总数据,元素的访问可以通过a【i】的方式进行,【】中的数字称为索引(下标),索引从0开始,使用len()函数可以获取列表长度,此外Python的列表还提供了切片(slicing)标记法,不仅可以访问某个值,还可以访问子列表,比如a【0:2】用于取出索引为0的元素到索引为2(不包含2)的元素,-1表示最后一个元素,-2表示倒数第二个元素,以此类推;
  • 字典——列表根据索引按照0,1,2,……的顺序存储值,字典以键值对的形式存储数据,比如me={‘height’:180,‘weight’:70};
  • if语句——根据不同的条件选择不同的处理分支可以使用if/else语句,Python使用空白字符表示缩进,每缩进一次使用4个字符(tab键);
  • for语句——进行循环处理时可以使用for语句,使用for…in…:语句结构可以按照顺序访问列表等数据集合中的各个元素;
  • 函数——可以将一连串的处理定义成函数,并且函数可以带参数。

4、Python脚本文件:打开文本编辑器建立以.py为后缀的文件,写好程序之后打开终端,使用cd命令进入.py文件所在位置,然后将该文件名作为参数,运行python命令,即使用python 脚本文件名.py命令就可以执行这个python程序。

5、:int、str等数据类型是“内置”数据类型,是Python一开始就有的数据类型,用户自己定义的类可以自己创建数据类型,也可以定义原创的方法(类函数)和属性。特殊方法__init__是进行初始化的方法,也称为构造函数,只在生成类的实例时被调用,而实例变量是存储在各个实例中的变量,通过self后面添加属性名来生成或访问实例变量。
Python中使用class关键字来定义类,遵循以下模板:

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

6、Numpy库:是一个外部库,并不包含在标准版Python中,使用import语句来导入库,Numpy的数组类(numpy.array)提供了很多便捷方法。

  • 生成Numpy数组:要生成Numpy数组,需要使用numpy.array()方法,接收python列表作为参数,生产NumPy数组(numpy.ndarray);
  • 算术运算:数组x和数组y元素个数相同时,可以对各个元素进行算术运算,当元素个数不同时程序就会报错,所以需要将元素个数保持一致;numpy数组也可以和单一数值(标量)组合起来进行运算,称为广播,需要在数组的各个元素和标量之间进行运算;
  • N维数组:不仅可以生产一维数组,还可以生成多维数组,另外矩阵A的形状可以通过A.shape查看,矩阵元素可以通过A.dtype查看,多维数组也可以以对应元素方式进行算术运算,或者通过标量(单一数值)对矩阵进行算术运算;
A = np.array([[1,2], [3,4]])
A.shape		#(2,2)
A.dtype 	#dtype('int64')
  • 广播:形状不同的数组之间也可以进行运算,比如:
A = np.array([[1,2], [3,4]])
B = np.array([10,20])		#一维数组扩展成[[10,20],[10,20]]
A * B 		#array([[10,40], [30,80]])
A * 10		#10扩展成[[10,10],[10,10]]
  • 访问元素:元素索引从0开始,对各个元素的访问可按照索引的方式进行,也可以使用for语句访问各个元素:for r in A: print(r),并且可使用**A.flatten()**将A数组转换为一维数组,对Numpy数组使用不等号运算符会得到一个结果是bool型的数组;

7、Matplotlib库:用于绘制图形,可以轻松绘制图形和实现数据的可视化,对于深度学习的图形绘制和数据可视化十分重要。可以使用pyplot模块绘制图形,并且能够进行添加标题和x轴标签名等其他功能;还可以使用image模块imread()方法读入图像,并用imshow()方法显示,注意设定合适的图像路径。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0,6,0.1)		#以0.1为单位,生成0-6的数据
y = np.sin(x)
y1 = np.cos(x)
plt.plot(x,y,label="sin")		#将x,y的数据传给该方法
plt.plot(x,y1,linestyle="--",label="cos")	#用虚线绘制
plt.xlabel("x")		#x轴标签
plt.xlabel("y")		#y轴标签
plt.title('sin & cos')		#标题
plt.legend()
plt.show()		#显示图形

8、个人笔记
1.在程序中可随时修改变量的值,Python始终记录变量的值;
2.中文输出需在首行加上#coding=utf-8,注意编写格式规范(缩进);
3..title() 以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写,.upper().lower() 将字符串改为全部大写或全部小写;
4.使用加号(+)来合并字符串;
5.要在字符串中添加制表符,可使用字符组合\t,要在字符串中添加换行符,可使用字符组合\n(可同时使用);
6.要确保字符串末尾没有空白,可使用方法rstrip(),而剔除字符串开头的空白或同时剔除字符串两端的空白,可分别使用方法lstrip() 和strip() (注意永久删除需将方法再赋给回给原变量);
7.Python使用双乘号表示乘方运算;
8.要显式地指出整数用作字符串,可调用函数str() ,它让Python将非字符串值表示为字符串;
9.注释用井号(#)标识。井号后面的内容都会被Python解释器忽略;
10.方括号([] )来表示列表,并用逗号来分隔其中的元素,第一个列表元素的索引为0,而不是1;将索引指定为-1 ,可让Python返回最后一个列表元素;
11.方法append(‘元素’) 将元素添加到了列表末尾,而不影响列表中的其他所有元素;
12.方法insert(0,‘元素’) 可在列表的任何位置添加新元素。需要指定新元素的索引和值;
13.知道要删除的元素在列表中的位置,可使用del 语句;要从列表中删除一个元素,且不再以任何方式使用它,就使用del 语句;如果你要在删除元素后还能继续使用它,就使用方法pop();要删除的元素的值,可使用方法remove()
14.方法sort() 让你能对列表进行排序,传递参数reverse=True按与字母顺序相反的顺序排列列表元素,修改是永久性的;
15.函数sorted() 让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序;
16.在for 循环中,想包含多少行代码都可以。在代码行for magician in magicians 后面,每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都执行一次,位于for语句后面且属于循环组成部分的代码行一定要缩进;
17.range() 能够生成一系列的数字,函数range() 让Python从你指定的第一个值开始数,并在到达你指定的第二个值之前停止,因此输出不包含第二个值;使用函数range()时,还可指定步长;
18.列表解析 将for 循环和创建新元素的代码合并成一行,并自动附加新元素。 squares = [value ** 2 for value in range(1,11)];
19.要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range() 一样,Python在到达指定的第二个索引前面的元素停止,没有指定第一个索引,Python将自动从列表开头开始;同理,未指定最后一个索引,则至列表末尾结束(也可以使用负数,并且可用在遍历中);
20.元组使用圆括号而不是方括号来标识,元组的值不可修改,存储的一组值在程序的整个生命周期内都不变;
21.在Python中检查是否相等时区分大小写,只想检查变量的值可将变量的值转换为小写,函数lower()不会修改存储在变量中的值,相应也可用upper()转换为大写(适用于单字母);
(网站采用类似的方式让用户输入的数据符合特定的格式。例如,网站可能使用类似的测试来确保用户名是独一无二的,而并非只是与另一个用户名的大小写不同。用户提交新的用户名时,将把它转换为小写,并与所有既有用户名的小写版本进行比较。执行这种检查时,如果已经有用户名’john’(不管大小写如何),则用户提交用户名’John’ 时将遭到拒绝。)
22.可使用and、or检查多个条件;
23.要判断特定的值是否已包含在列表中,可使用关键字in;检查特定值是否不包含在列表中,可使用关键字not in;
24.只想执行一个代码块,就使用if-elif-else 结构;如果要运行多个代码块,就使用一系列独立的if 语句;
25.字典是一系列 键-值对 。每个键都与一个值相关联,可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典,字典用放在花括号{}中的一系列键—值对表示,键和值之间用冒号分隔,而 键-值对 之间用逗号分隔;
26.字典是一种动态结构,可随时在其中添加 键-值对 。要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值。使用字典来存储用户提供的数据或在编写能自动生成大量键—值对的代码时,通常都需要先定义一个空字典;
27.对于字典中不再需要的信息,可使用del语句将相应的键—值对彻底删除。使用del 语句时,必须指定字典名和要删除的键;
28.字典名和方法items()返回一个键—值对列表,在不需要使用字典中的值时,方法keys() 可用于遍历字典中所有的键,并且在遍历字典时,会默认遍历所有的键;
29.获取字典的元素时,获取顺序是不可预测的,可使用函数sorted() 来获得按特定顺序排列的键列表的副本;
30.方法values() ,它返回一个值列表,而不包含任何键;
31.为剔除重复项,可使用集合(set)。集合类似于列表但每个元素都必须是独一无二的;
32.字典中可存储列表和字典(存储为值);
33.python保留字:即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

34.函数input() 让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将 其存储在一个变量中;
35.Python2.x 中 input() 相等于 raw_input(prompt) ,用来获取控制台的输入;
36.input输入类型是字符串,可使用函数int() 让Python将输入视为数值。函数int() 将数字的字符串表示转换为数值表示,即可进行条件判断;(python3.x)
37.处理数值信息时,求模运算符(%)是一个很有用的工具,将两个数相除并返回余数;
38.for 循环用于针对集合中的每个元素都有一个代码块,而while 循环不断地运行,直到指定的条件不满足为止;
39.要立即退出while 循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用break 语句,也可用来退出遍历列表或字典的for 循环;
40.要返回到循环开头,并根据条件测试结果决定是否继续执行循环,使用continue 语句;
41.如果程序陷入无限循环,可按Ctrl+ C,也可关闭显示程序输出的终端窗口;
42.使用关键字def 来定义一个函数。函数定义向Python指出函数名,还可能在括号内指出函数为完成其任务需要什么样的信息(形参),定义以冒号结尾,要调用函数,可依次指定函数名以及用括号括起的必要信息;
43.位置实参要求实参的顺序与形参的顺序相同;也可使用关键字实参,其中每个实参都由变量名和值组成;还可使用列表和字典,无需考虑函数调用中的实参顺序;
44.编写函数时可给每个形参指定默认值 。在调用函数中给形参提供了实参时,Python使用指定的实参值;否则,将使用形参的默认值,给形参指定默认值后,可在函数调用中省略相应的实参;
45. 使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参;
46.函数返回的值被称为返回值,函数中可使用return 语句将值返回到调用函数的代码行;
47.让中间名变成可选的,可给实参middle_name 指定一个默认值——空字符串,并在用户没有提供中间名时不使用这个实参;
48.切片表示法[:] 创建列表的副本 print_models(unprinted_designs[:], completed_models)
49.形参名
toppings 中的星号让Python创建一个名为toppings 的空元组,并将收到的所有值都封装到这个元组中。(可传递任意数量的参数),与位置参数一起使用时定义应放在最后;
50.形参**user_info 中的两个星号让Python创建一个名为user_info 的空字典,并将收到的所有名称——值对都封装到这个字典中;
51.将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。import 语句允许在当前运行的程序文件中使用模块中的代码;
52.如果要导入的函数的名称可能与程序中现有的名称冲突或者函数的名称太长,可指定简短而独一无二的别名,关键字as 将函数重命名为你提供的别名;还可以给模块指定别名*;
53.使用星号(* )运算符可让Python导入某个模块中的所有函数 from pizza import *;
54.定义函数时,给形参指定默认值时,等号两边不要有空格;对于函数调用中的关键字实参也应遵循这种约定;
55.Python中,首字母大写的名称指的是类,小写的名称指的是根据类创建的实例,类中的函数称为方法;
56.方法__init__() 是一个特殊的方法,根据类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,可通过实例访问的变量称为属性,要访问实例的属性,可使用句点表示法;
57.要调用方法,可指定实例的名称和要调用的方法,并用句点分隔它们;
58.类中的每个属性都必须有初始值,哪怕这个值是0或空字符串。在有些情况下,如设置默认值时,在方法__init__() 内指定这种初始值是可行的;如果你对某个属性这样做 了,就无需包含为它提供初始值的形参;
59.可以以三种不同的方式修改属性的值:直接通过实例进行修改;通过方法进行设置;通过方法进行递增(增加特定的值);
60.要编写的类是另一个现成类的特殊版本,可使用继承,一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类 ,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法,让一个类继承另一个类后,可添加区分子类和父类所需的新属性和方法;
61.创建子类时,父类必须包含在当前文件中,且位于子类前面,定义子类时,必须在括号内指定父类的名称。方法__init__() 接受创建实例所需的信息,super() 是一个特殊函数,帮助Python将父类和子类关联起来,python2.7中函数super()需要两个实参:子类名和对象self ;
62.Python允许将类存储在模块中,然后在主程序中导入所需的模块。Python标准库是一组模块,安装的Python都包含它;
63.函数open()接受一个参数:要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件,函数open() 返回一个表示文件的对象,然后使用方法read() 读取这个文件的全部内容,并将其返回一个长字符串,可保存在变量中;方法readlines() 从文件中读取每一行,可将其存储在一个列表中。要删除多出来的空行,可在print语句中使用rstrip();
64.Python打开不与程序文件位于同一个目录中的文件,需要提供文件路径 ,它让Python到系统的特定位置去查找;
65.使用关键字with 时,open() 返回的文件对象只在with 代码块内可用。如果要在with 代码块外访问文件的内容,可在with 代码块内将文件的各行存储在一个列表中,并在with 代码块外使用该列表;
66.读取文本文件时,Python将其中的所有文本都解读为字符串。如果读取的是数字,并要将其作为数值使用,就必须使用函数int() 将其转换为整数,或使用函数float() 将其转换为浮点数;
67.可使用方法replace() 将字符串中的特定单词都替换为另一个单词;
68.调用open() 时提供了两个实参,第一个实参是要打开的文件的名称;第二个实参可指定读取模式 (‘r’ )、写入模式 (‘w’ )、附加模式 (‘a’ )或让你能够读取和写入文件的模式(‘r+’ )。如果省略了模式实参,Python将以默认的只读模式打开文件;
69.如果要写入的文件不存在,函数open() 将自动创建它。以写入(‘w’ )模式打开文件时如果指定的文件已经存在,Python将在返回文件对象前清空该文件;
70.Python使用被称为异常的特殊对象来管理程序执行期间发生的错误,使用try-except 代码块处理。try-except 代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办;
71.只有可能引发异常的代码才需要放在try 语句中,except 代码块告诉Python,如果它尝试运行try 代码块中的代码时引发了指定的异常该怎么办,pass 语句可在代码块中使用它来让Python 什么都不要做;
72.模块json 能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据,还可以使用json 在Python程序之间分享数据;
73.函数json.dump() 接受两个实参:要存储的数据以及可用于存储数据的文件对象,通常使用文件扩展名.json来指出文件存储的数据为JSON格式,使用函数json.load() 加载存储变量中的信息;
74.Python标准库中的模块unittest 提供了代码测试工具。单元测试用于核实函数的某个方面没有问题;测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求;
75.良好的测试用例考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试。全覆盖式测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要实现全覆盖可能很难。通常,最初只要针对代码的重要行为编写测试即可,等项目被广泛使用时再考虑全覆盖;
76.要为函数编写测试用例,可先导入模块unittest 以及要测试的函数,再创建一个继承unittest.TestCase 的类,并编写一系列方法对函数行为的不同方面进行测试。

本文地址:https://blog.csdn.net/qq_37635772/article/details/107285189