2.初识网络代码——python基础代码
Python深度学习入门:从基础语法到PyTorch实战
1. Python语言简介
Python是一门简洁、易读、功能强大的高级编程语言,以其接近人类自然语言的语法特点而广受欢迎。在深度学习领域,Python凭借其丰富的科学计算库(如NumPy、PyTorch、TensorFlow)和简洁的语法,成为了研究和开发的首选语言。
Python的核心优势:
- 语法简洁:代码可读性高,学习曲线平缓
- 生态丰富:拥有庞大的第三方库支持
- 跨平台:可在Windows、Linux、macOS等多个操作系统上运行
- 社区活跃:遇到问题可以快速找到解决方案
对于深度学习初学者来说,掌握Python基础是进入AI领域的必经之路。本文将从Python基础语法讲起,逐步深入到深度学习所需的NumPy和PyTorch库的使用。
2. Python基础数据结构
在Python中,数据结构是组织和存储数据的方式。掌握以下五种基本数据类型是编写Python程序的基础:
2.1 数值类型:整型与浮点型
整型(int)用于表示整数,浮点型(float)用于表示小数。Python的变量使用非常灵活,无需显式声明类型。
# 整型示例a=3# Python的变量使用之前不需要声明,而是根据内容自动分配类型# a = 3.0 按Ctrl+/可以快速注释选中代码print(a)b=4print(b)print(a,b)a,b=b,a# Python支持多变量赋值,这是Python特有的简洁语法print(a,b)运行结果:
浮点型示例:
name="ligekaoyan"# 字符串可以用单引号或双引号print(name)print(name[2])# 字符串支持索引访问,索引从0开始运行结果:
2.2 列表(List)
列表是Python中最常用的数据结构之一,用于存储有序的元素集合。
2.2.1 基础用法
# 列表 list []list1=[1,2,3,4,5]print(list1)print(list1[2])# 访问第三个元素(索引从0开始)print(list1[-1])# 负索引是Python中非常强大的功能,-1表示最后一个元素dict1={"name":"ligekaoyan","age":28,20:80}# 字典list2=[1,"art",dict1]# 列表可以嵌套其他数据类型,包括字典print(list2)运行结果:
2.2.2 列表的切片、插入与删除
切片操作是Python列表的强大功能,可以方便地获取子列表:
list1=[1,2,3,4,5]foreachinlist1:print(each)print(list1[1:4])# [2, 3, 4],左闭右开区间print(list1[0:4])# [1, 2, 3, 4]print(list1[1:-1])# [2, 3, 4],-1表示最后一个元素print(list1[1:])# [2, 3, 4, 5],冒号后不写默认到末尾print(list1[:])# [1, 2, 3, 4, 5],复制整个列表foreachinlist1[1:4]:print(each)运行结果:
删除操作:
list2=[1,2,3,10,5]print(list2)list2.remove(10)# 删除指定值的元素print(list2)list2=[1,2,3,10,5]dellist2[3]# 删除指定索引的元素print(list2)运行结果:
增加操作:
list2=[1,2,3,4,5]list2.append(7)# 在末尾添加一个元素print(list2)list2.extend([8,9])# 在末尾添加另一个列表的所有元素print(list2)# 列表推导式:快速构建列表的简洁语法list2=[iforiinrange(1,10,2)]# 生成1到9的奇数列表print(list2)# 等价写法list3=[]foriinrange(10):list3.append(i)print(list3)运行结果:
2.3 字典(Dictionary)
字典是Python中的键值对集合,类似于其他语言中的Map或哈希表。
# 字典 dict {}# 格式:key : valuedict1={"name":"ligekaoyan","age":28,20:80}# 键可以是字符串、数字等不可变类型print(dict1["name"])# 用key作为索引来访问valueprint(dict1["age"])print(dict1[20])运行结果:
字典的特点:
- 键必须是不可变类型(字符串、数字、元组)
- 值可以是任意类型
- 通过键快速访问值,时间复杂度为O(1)
3. Python基本语句与流程控制
要掌握一门编程语言,首先需要理解其四种基础语句类型:赋值语句、条件判断、循环语句和函数定义。这些构成了程序逻辑的骨架。
3.1 赋值语句(陈述)
赋值语句用于给变量分配值,这是最基本的操作。Python支持多种赋值方式:
- 简单赋值:
a = 3
ÿ09- 多重赋值:a, b = 1, 2
ÿ09- 链式赋值:a = b = c = 0
3.2 条件判断(if语句)
条件判断让程序能够根据不同的情况执行不同的代码块,这是实现逻辑控制的基础。
a=3ifa==3:# 条件后面必须有冒号print("正确的")# Python中使用缩进来表示代码块,通常使用4个空格print("今天天气不错")ifa==4:print("错误的1")print("错误的2")# 这行不属于任何if语句,总是会执行运行结果:
嵌套条件判断:
a=3b=4ifa==3:ifb>3:print("b大于3")else:print("b不大于3")# Shift+Tab可以取消缩进运行结果:
None值的判断:
A=None# None表示空值,类似于其他语言中的nullifA==None:print("A为空")运行结果:
3.3 循环语句
循环用于重复执行某段代码,Python提供了for和while两种循环。
for循环:
# for i in 可迭代对象list1=[1,2,3,4,5]foriinlist1:print(i)运行结果:
range()函数:生成一个整数序列,常用于控制循环次数
foriinrange(10):# [0, 10),不包含10print(i)print("----------")foriinrange(1,10,2):# 从1开始,到10结束(不包含),步长为2print(i)运行结果:
遍历字典:
dict1={"name":"ligekaoyan","age":28,20:80}print(dict1)foreachindict1:# each是常用的遍历变量名print(each)# 打印keyprint(dict1[each])# 打印value运行结果:
while循环:
i=0whilei<10:# 相比C语言,Python的while语句少括号多冒号i=i+1# Python没有i++语法print(i)运行结果:
3.4 函数
函数是组织代码的基本单元,可以提高代码的复用性和可读性。
基本算术运算:
a=3b=2print(a+b)# 加法print(a-b)# 减法print(a*b)# 乘法print(a/b)# 除法,返回浮点数print(a//b)# 整除(向下取整除法),和C语言除法类似print(a**b)# 幂运算,a的b次方运行结果:
自定义函数:
# 计算a的平方defmyfunc1(a):c=a**2returnc a=3print(myfunc1(a))# 计算a的b次方defmyfunc2(a,b):returna**b a=3b=3print(myfunc2(a,b))# 默认参数:如果传入b就返回a的b次方,否则返回a的平方defmyfunc3(a,b=2):returna**b a=3print(myfunc3(a))# 使用默认参数b=2print(myfunc3(a,3))# 传入b=3运行结果:
函数设计原则:
- 单一职责:一个函数只做一件事
- 参数明确:参数名要有意义,必要时添加类型提示
- 返回值清晰:明确函数返回什么
- 文档注释:使用docstring说明函数功能
5.numpy库的作用
numpy深度学习中非常重要的一个库
importnumpyasnp#进行缩写list1=[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]print(list1)array1=np.array(list1)#转化为矩阵print(array1)array2=np.array(list1)array3=np.concatenate((array1,array2),axis=1)#拼接,axis=1横向拼接(向右),axis=0竖向拼接(向下)print(array3)结果
切片
list1=[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]print(list1)array1=np.array(list1)#转化为矩阵#矩阵的切片功能更强大print(list1[1:3])print(array1[1:3,1:3])#跳着切idx=[1,3]print(array1[:,idx])结果
6.torch库与tensor
6.1张量
张量是一个升级版矩阵,它能表示的维度更多,它的计算速度更快
importtorchimportnumpyasnp list1=[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]print(list1)array1=np.array(list1)#转化为矩阵print(array1)tensor1=torch.tensor(list1)#转化为张量print(tensor1)print(tensor1.shape)结果
张量可以用来求梯度
#求梯度x=torch.tensor(3.0)x.requires_grad_(True)#告诉张量,需要求梯度,否则求梯度时会报错y=x**2y.backward()#求梯度print(y)print(x.grad)# x.grad.zero_() #清空梯度,否则会累加y2=x**2y2.backward()print(y2)print(x.grad)这里没有情况梯度,第二次的梯度结果是错误的
再来看清空之后的情况
#求梯度x=torch.tensor(3.0)x.requires_grad_(True)#告诉张量,需要求梯度y=x**2y.backward()#求梯度print(y)print(x.grad)x.grad.zero_()#清空梯度,否则会累加y2=x**2y2.backward()print(y2)print(x.grad)结果
6.2张量的创建与求和
#创建张量tensor1=torch.ones(10,4)#创建全1张量print(tensor1)tensor2=torch.zeros(10,4)#创建全0张量print(tensor2)tensor3=torch.rand(10,4)#创建随机张量print(tensor3)tensor4=torch.normal(mean=10,std=1,size=(10,4))#创建正太分布张量print(tensor4)#求和tensor1=torch.ones(10,4)sum1=tensor1.sum(dim=1,keepdim=True)#dim 1求行和,keepdim=True 保留维度print(sum1)print(tensor1.shape)结果
6.3引用
我们不会在一个文件里面完成所有工作,可以通过引用来传递数据
frommytensorimporttensor1#引用会把mytensor先运行一遍frommyclassimportsupermanprint(tensor1)lige=superman('ligekaoyao',28)结果
7.总结
总的来说,通过本课学习,了解了python基础的数据结构,基本语句,类与继承,numpy,tensor,torch等
我终于对类与继承这些面向对象编程的内容有所了解
