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的变量使用非常灵活无需显式声明类型。# 整型示例a3# Python的变量使用之前不需要声明而是根据内容自动分配类型# a 3.0 按Ctrl/可以快速注释选中代码print(a)b4print(b)print(a,b)a,bb,a# Python支持多变量赋值这是Python特有的简洁语法print(a,b)运行结果浮点型示例nameligekaoyan# 字符串可以用单引号或双引号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 03.2 条件判断if语句条件判断让程序能够根据不同的情况执行不同的代码块这是实现逻辑控制的基础。a3ifa3:# 条件后面必须有冒号print(正确的)# Python中使用缩进来表示代码块通常使用4个空格print(今天天气不错)ifa4:print(错误的1)print(错误的2)# 这行不属于任何if语句总是会执行运行结果嵌套条件判断a3b4ifa3:ifb3:print(b大于3)else:print(b不大于3)# ShiftTab可以取消缩进运行结果None值的判断ANone# None表示空值类似于其他语言中的nullifANone: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循环i0whilei10:# 相比C语言Python的while语句少括号多冒号ii1# Python没有i语法print(i)运行结果3.4 函数函数是组织代码的基本单元可以提高代码的复用性和可读性。基本算术运算a3b2print(ab)# 加法print(a-b)# 减法print(a*b)# 乘法print(a/b)# 除法返回浮点数print(a//b)# 整除向下取整除法和C语言除法类似print(a**b)# 幂运算a的b次方运行结果自定义函数# 计算a的平方defmyfunc1(a):ca**2returnc a3print(myfunc1(a))# 计算a的b次方defmyfunc2(a,b):returna**b a3b3print(myfunc2(a,b))# 默认参数如果传入b就返回a的b次方否则返回a的平方defmyfunc3(a,b2):returna**b a3print(myfunc3(a))# 使用默认参数b2print(myfunc3(a,3))# 传入b3运行结果函数设计原则单一职责一个函数只做一件事参数明确参数名要有意义必要时添加类型提示返回值清晰明确函数返回什么文档注释使用docstring说明函数功能5.numpy库的作用numpy深度学习中非常重要的一个库importnumpyasnp#进行缩写list1[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]print(list1)array1np.array(list1)#转化为矩阵print(array1)array2np.array(list1)array3np.concatenate((array1,array2),axis1)#拼接axis1横向拼接向右axis0竖向拼接向下print(array3)结果切片list1[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]print(list1)array1np.array(list1)#转化为矩阵#矩阵的切片功能更强大print(list1[1:3])print(array1[1:3,1:3])#跳着切idx[1,3]print(array1[:,idx])结果6.torch库与tensor6.1张量张量是一个升级版矩阵它能表示的维度更多它的计算速度更快importtorchimportnumpyasnp list1[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]print(list1)array1np.array(list1)#转化为矩阵print(array1)tensor1torch.tensor(list1)#转化为张量print(tensor1)print(tensor1.shape)结果张量可以用来求梯度#求梯度xtorch.tensor(3.0)x.requires_grad_(True)#告诉张量需要求梯度否则求梯度时会报错yx**2y.backward()#求梯度print(y)print(x.grad)# x.grad.zero_() #清空梯度否则会累加y2x**2y2.backward()print(y2)print(x.grad)这里没有情况梯度第二次的梯度结果是错误的再来看清空之后的情况#求梯度xtorch.tensor(3.0)x.requires_grad_(True)#告诉张量需要求梯度yx**2y.backward()#求梯度print(y)print(x.grad)x.grad.zero_()#清空梯度否则会累加y2x**2y2.backward()print(y2)print(x.grad)结果6.2张量的创建与求和#创建张量tensor1torch.ones(10,4)#创建全1张量print(tensor1)tensor2torch.zeros(10,4)#创建全0张量print(tensor2)tensor3torch.rand(10,4)#创建随机张量print(tensor3)tensor4torch.normal(mean10,std1,size(10,4))#创建正太分布张量print(tensor4)#求和tensor1torch.ones(10,4)sum1tensor1.sum(dim1,keepdimTrue)#dim 1求行和keepdimTrue 保留维度print(sum1)print(tensor1.shape)结果6.3引用我们不会在一个文件里面完成所有工作可以通过引用来传递数据frommytensorimporttensor1#引用会把mytensor先运行一遍frommyclassimportsupermanprint(tensor1)ligesuperman(ligekaoyao,28)结果7.总结总的来说通过本课学习了解了python基础的数据结构基本语句类与继承numpytensortorch等我终于对类与继承这些面向对象编程的内容有所了解