深度学习入门之前置知识

举报
kongla 发表于 2022/01/17 20:58:34 2022/01/17
【摘要】 动手精读深度学习入门这本书

python安装

网上教程很多,就不多说了

python解释器

就是算术运算,数据类型,变量,列表,字典,布尔型,if语句,for语句以及函数这些

python脚本文件

想进行一连串处理时,可以将python程序保存为文件,然后集中的运行该文件

保存为文件

比如说建一个test.py文件
终端运行,移到test.py所在的位置下,然后将test.py文件名作为参数,运行python命令

我个人觉得还是走vscode里运行方便一点

int和str等数据类型都是“内置”的数据类型,现在来定义新的类。

python中使用class关键字来定义类,类要遵循以下格式(模板)

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

这里的__init__是进行初始化的方法,也成为构造函数,只有生成类的实例时被调用一次

举个例子

class Man:
    def __init__(self,name):
        self.name = name
        print("Initialized")

    def hello(self):
        print("Hello "+ self.name + "!")

    def goodbye(self):
        print("Good-bye " + self.name + "!")

m = Man("Peter")
m.hello()
m.goodbye()

运行终端输出
在这里插入图片描述
这里定义了一个新类Man。上面类Man生成了实例(对象)m。

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

numpy

在深度学习实现中,经常出现矩阵和数组的计算,numpy.array提供了很多便捷的方法

导入numpy

numpy是外部库,,首先要导入

import numpy as np

写成这样就可通过np来调用

生成numpy数组

需要使用np.array()方法。np.array()接收python列表作为参数,生成numpy数组(numpy.ndarray)

import numpy as np

x = np.array([1.0,2.0,3.0])
print(x)
print(type(x))

在这里插入图片描述

numpy的算术运算

import numpy as np

x = np.array([1.0,2.0,3.0])
y = np.array([2.0,4.0,6.0])  
print(x + y)
print(x * y)
print(x / y)

在这里插入图片描述
元素个数要相同,不然会报错

numpy的N维数组

numpy不仅可以生成一维数组,也可以生成多维数组

import numpy as np

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

这里就生成了一个2*2的矩阵A。矩阵A的形状可以通过shape查看,矩阵元素的数据类型可以通过dtype查看
在这里插入图片描述
算术运算和之前的一样,在相同形状的矩阵内以对应元素的方式进行,也可以通过标量对矩阵进行算术运行

广播

import numpy as np

A = np.array([[1,2],[3,4]])
print(A)
print(A * 10)

在这里插入图片描述
22的矩阵A与标量10进行乘法运算。中间过程就是标量10被拓展成22的形状,再与矩阵A进行乘法运算,这个功能就叫广播

访问元素

元素的索引从0开始,对各个元素的访问可按如下方式进行

import numpy as np

A = np.array([[24,13],[53,18],[36,21]])
print(A)
print(A[0])        # 第0行
print(A[0][1])     # (0,1)的元素   

在这里插入图片描述
也可以使用for语句来访问各个元素

for row in A:
	print(row)

除了索引操作,还可以使用数组访问各个元素

import numpy as np

A = np.array([[24,13],[53,18],[36,21]])
A = A.flatten()     # 将x转换为一维数组
print(A)
print(A[np.array([0,2,4])])   # 获取索引为0,2,4的元素

在这里插入图片描述
运用这个标记法,可以获取满足一定条件的元素

import numpy as np

A = np.array([[24,13],[53,18],[36,21]])
A = A.flatten()     # 将x转换为一维数组
print(A > 15)
print(A[A > 15])

在这里插入图片描述

matplotlib

图形的绘制和数据的可视化十分重要,matplotlib就是用于绘制图形的库

绘制sin函数

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
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,对x的各个元素,应用numpy的sin函数np.sin(),将x,y的数据传给plt.plot方法,然后绘制图形,最后通过plt.show()显示图形。

pyplot的功能

追加cos函数,添加标题和x轴标签名等功能

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
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()
plt.show()

在这里插入图片描述

显示图像

pyplot中还提供了用于显示图像的方法imshow(),可以使用imread()

import matplotlib.pyplot as plt
from matplotlib.image import imread
img = imread('lena.jpg')       # 读入图像
plt.imshow(img)

plt.show()

在这里插入图片描述

踩坑记录

报错1

AttributeError: module ‘numpy’ has no attribute ‘array’

是说在numpy文件中没找到array属性,这可能是将文件名命名为代码中使用过的第三方库的名称。然后代码编译的时候,会读取到编写的这个程序进行执行,发现没有相关的属性,进而报错。

报错2

使用type方法没有结果

命令行交互式你输入则解释一句,并直接输出运行结果
脚本中则需要使用print

print(type(id))

报错3

TypeError: Field elements must be 2- or 3-tuples, got ‘3’

np.array([1,2],[3,4])写法形式错误,应该还有一个中括号np.array([[1,2],[3,4]])

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。