2.1 初识网络代码——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 = 4
print(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]
for each in list1:
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],复制整个列表
for each in list1[1:4]:
print(each)
运行结果:

删除操作:
list2 = [1, 2, 3, 10, 5]
print(list2)
list2.remove(10) # 删除指定值的元素
print(list2)
list2 = [1, 2, 3, 10, 5]
del list2[3] # 删除指定索引的元素
print(list2)
运行结果:

增加操作:
list2 = [1, 2, 3, 4, 5]
list2.append(7) # 在末尾添加一个元素
print(list2)
list2.extend([8, 9]) # 在末尾添加另一个列表的所有元素
print(list2)
# 列表推导式:快速构建列表的简洁语法
list2 = [i for i in range(1, 10, 2)] # 生成1到9的奇数列表
print(list2)
# 等价写法
list3 = []
for i in range(10):
list3.append(i)
print(list3)
运行结果:

2.3 字典(Dictionary)
字典是Python中的键值对集合,类似于其他语言中的Map或哈希表。
# 字典 dict {}
# 格式:key : value
dict1 = {"name": "ligekaoyan", "age": 28, 20: 80} # 键可以是字符串、数字等不可变类型
print(dict1["name"]) # 用key作为索引来访问value
print(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 = 3
if a == 3: # 条件后面必须有冒号
print("正确的") # Python中使用缩进来表示代码块,通常使用4个空格
print("今天天气不错")
if a == 4:
print("错误的1")
print("错误的2") # 这行不属于任何if语句,总是会执行
运行结果:

嵌套条件判断:
a = 3
b = 4
if a == 3:
if b > 3:
print("b大于3")
else:
print("b不大于3") # Shift+Tab可以取消缩进
运行结果:

None值的判断:
A = None # None表示空值,类似于其他语言中的null
if A == None:
print("A为空")
运行结果:

3.3 循环语句
循环用于重复执行某段代码,Python提供了for和while两种循环。
for循环:
# for i in 可迭代对象
list1 = [1, 2, 3, 4, 5]
for i in list1:
print(i)
运行结果:

range()函数:生成一个整数序列,常用于控制循环次数
for i in range(10): # [0, 10),不包含10
print(i)
print("----------")
for i in range(1, 10, 2): # 从1开始,到10结束(不包含),步长为2
print(i)
运行结果:

遍历字典:
dict1 = {"name": "ligekaoyan", "age": 28, 20: 80}
print(dict1)
for each in dict1: # each是常用的遍历变量名
print(each) # 打印key
print(dict1[each]) # 打印value
运行结果:

while循环:
i = 0
while i < 10: # 相比C语言,Python的while语句少括号多冒号
i = i + 1 # Python没有i++语法
print(i)
运行结果:

3.4 函数
函数是组织代码的基本单元,可以提高代码的复用性和可读性。
基本算术运算:
a = 3
b = 2
print(a + b) # 加法
print(a - b) # 减法
print(a * b) # 乘法
print(a / b) # 除法,返回浮点数
print(a // b) # 整除(向下取整除法),和C语言除法类似
print(a ** b) # 幂运算,a的b次方
运行结果:

自定义函数:
# 计算a的平方
def myfunc1(a):
c = a ** 2
return c
a = 3
print(myfunc1(a))
# 计算a的b次方
def myfunc2(a, b):
return a ** b
a = 3
b = 3
print(myfunc2(a, b))
# 默认参数:如果传入b就返回a的b次方,否则返回a的平方
def myfunc3(a, b=2):
return a ** b
a = 3
print(myfunc3(a)) # 使用默认参数b=2
print(myfunc3(a, 3)) # 传入b=3
运行结果:

函数设计原则:
- 单一职责:一个函数只做一件事
- 参数明确:参数名要有意义,必要时添加类型提示
- 返回值清晰:明确函数返回什么
- 文档注释:使用docstring说明函数功能
4. Python的类与继承
4.1 类
在深度学习中,我们要想搭建一个模型,可能要集成很多东西
那么我们需要用到类,它可以集成很多的属性和自己的函数
是这个类的实例,就可以用这个类的东西
我们来定义一个人的类
#__init__中来声明属性
class person(): #修正拼写错误:persion -> person
def __init__(self,name,age): #self表示类自己,用于在各个函数中传递属性
self.name=name
self.age=age
def print_name(self):
print(self.name)
def print_age(self):
print(self.age)
切记声明了一个类,但不代表有这个实例,如果在下面直接打印那就会报错

结果

ps:这种情况就如同定义了一个链表节点,不等于有了一个链表
下面是实例化
laoli=person('ligekaoyan',28) #实例化,统一用户名为ligekaoyan
print(laoli.name)
laoli.print_name() #类中函数可以直接使用
结果

4.2 继承
继承的意义在于减少重复性工作
我们再来定义一个超人的类,超人有人的属性,所以我们直接继承人的类
class superman(person): #继承person类
def __init__(self,name,age):
super().__init__(name, age)
#super(superman, self).__init__(name,age)与上面等同
self.fly_=True
def fly(self):
if(self.fly_== True):
print("我会飞")
lige=superman('ligekaoyan',28) #统一用户名为ligekaoyan
lige.print_name()
print(lige.name)
lige.print_age()
lige.fly()
结果

5.numpy库的作用
numpy深度学习中非常重要的一个库
import numpy as np #进行缩写
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张量
张量是一个升级版矩阵,它能表示的维度更多,它的计算速度更快
import torch
import numpy as np
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)
结果

这里我们可以看见张量的前面有一个tensor,这个标志就说明了它是张量
张量挂在张量网上,如果要画图需要先取出
张量可以用来求梯度
#求梯度
x=torch.tensor(3.0)
x.requires_grad_(True) #告诉张量,需要求梯度,否则求梯度时会报错
y=x**2
y.backward() #求梯度
print(y)
print(x.grad)
# x.grad.zero_() #清空梯度,否则会累加
y2=x**2
y2.backward()
print(y2)
print(x.grad)
这里没有清空梯度,第二次的梯度结果是错误的

再来看清空之后的情况
#求梯度
x=torch.tensor(3.0)
x.requires_grad_(True) #告诉张量,需要求梯度
y=x**2
y.backward() #求梯度
print(y)
print(x.grad)
x.grad.zero_() #清空梯度,否则会累加
y2=x**2
y2.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引用
我们不会在一个文件里面完成所有工作,可以通过引用来传递数据
from mytensor import tensor1 #引用会把mytensor先运行一遍
from myclass import superman
print(tensor1)
lige=superman('ligekaoyao',28)
结果

7.总结
总的来说,通过本课学习,了解了python基础的数据结构,基本语句,类与继承,numpy,tensor,torch等
我终于对类与继承这些面向对象编程的内容有所了解
更多推荐

所有评论(0)