1 numpy学习笔记
1.1 基础知识
1、数据在机器学习中的存储形式
在机器学习中,所有的输入数据都会转变为一维/多维数组的形式进行存储
2、数组的形状
数组的形状用一个元组来表示,它描述了数组的维数和长度,比如(3,3,3,3)这里面一共有4个数组,即表示4维数组,每一个数组代表着这个维度的长度,这里第一二三四维度的长度都是3
3、如何在python中创建这些数组及如何使用?
python中提供了NumPy库进行数据的数组形式存储以及操作,该库提供了多维数组、矩阵的常用操作和一些高效的科学计算函数,底层运算通过C语言实现,处理速度快,效率高,适用于大规模多维数组,数组规模越大,性能就越能体现
4、numpy如何创建数组
- 创建格式:a = np.array([0,1,2,3,4,5])
- 指定数组的数据类型,a = np.array([0,1,2,3,4,5],dtype=np.int64)
- 数组的属性
- ndmin数组的维数
- shape数组的形状
- size数组元素的总个数
- ·dtype数组中元素中的数据类型
- ·itemsize数组中每个元素的字节数
- 数组的属性
5、numpy创建特殊的数组
- np.arange(起始数字,结束数字,步长,dtype=数据类型):创建数字序列数组
- np.ones(shape,dtype=数据类型):创建全1数组
- np.zeros(shape,dtype=数据类型):创建全0数组
- np.eye(shape):创建单位矩阵
- np.linspace(起始数字,结束数字,num=元素个数):创建等差数列
- np.logspace(起始指数,结束指数,num=元素个数,底数):创建等比数列。比如np.logspace(1,5,5,2)表示第一位数组就是2^1(起始指数是1) - 2^2 - 2^3 - 2^4 - 2^5(结束指数是5)一共5个元素
6、numpy数组的运算
- 1、b[0:2]:获得数组元素的切片,b是数组
- 2、b[0:2,0:3]:获得数组元素的切片,b是数组
- 3、np.reshape(shape):不改变当前数组,按照shape创建新的数组
- 通过reshape快速创建数组:np.arange(12).reshape(3,4)
- np.reshape(-1):根据数组中元素个数,以及其他维度的取值,来自动计算出这个维度的取值
- 4、np.resize(shape):改变当前数组,按照shape创建新的数组
- 5、数组的加法运算
- 当数组的格式shape相同的时候,可以使用数组的加法并列成新的数组
- 6、矩阵运算-矩阵乘法
- 乘号运算符:矩阵中对应的元素分别相乘
- 7、矩阵运算-转置和求逆
- ·np.transpose():矩阵转置
- ·np.linalg.inv():矩阵求逆
7、数组元素之间的运算
- numpy.sum()计算所有元素的和
- numpy.prod()计算所有元素的乘积
- numpy.diff()计算数组的相邻元素之间的差
- numpy.sqrt()计算各元素的平方根
- numpy.exp()计算各元素的指数值
- numpy.abs()取各元素的绝对值
1.2 numpy矩阵对象
一个二维数组可以看做矩阵
1、矩阵的创建形式
- np.matrix(字符串/列表/数组)
- np.mat(字符串/列表/数组)
2、矩阵对象的属性
- ndim:矩阵维数
- shape:矩阵的形状
- size:矩阵的元素个数
- dtype:元素的数据类型
3、矩阵运算–转置、求逆
- 矩阵转置:矩阵对象.T
- 矩阵求逆:矩阵对象.I
1.3 numpy产生随机数---------
1、产生随机数函数–模块numpy.random
- np.random.rand(d0,d1,d2…dn)元素在(0,1)均匀分布的数组
- np.random.uniform(low,high,size)元素在(low,high)区间均匀分布的数组
- np.random.randint(low,high,size)元素在(low,high)区间均匀分布的数组
- np.random.randn(d0,d1,d2…dn)产生标准正态分布数组
- np.random.normal(loc,scale,size)产生正态分布的数组
- np.random,shuffle(序列)打乱顺序函数
2、随机函数产生不同随机数组的原因
- 伪随机数:由随机数种子根据一定的算法生成
- 产生随机数组是根据随机种子根据一定的算法产生随机数组的,而每一次产生随机种子(seed()函数)都是不同的,所以产生的随机数组都是不同的,当我们设置随机种子一样的时候,那么长生的随机数组就是一样的
============================
2 matplotlib画图工具学习笔记
1、出现matplotlib的背景
numpy对数据进行统计分析计算,但是大量枯燥的数据令人头痛,随后就出现了matplotlib将数据进行可视化,它是绘制图表的第三方库,可以快速方便的生成高质量的图表。包括直方图、柱状图、散点图、气泡图、折线图、三维图
- 作用1:数据分析阶段:理解和洞察数据之间的关系
- 作用2:算法调试阶段:发现问题,优化算法
- 作用3:项目总结阶段:展示项目成果
2、pyplot-是matplotlib的子库,快速绘制二维图表
- 2.1 Figure对象-画布
- 2.1.1 构造函数:fig = pyplot.figure(num,figsize,dpi,facecolor,edgecolor,frameon)
- num:图形的编号或名称
- figsize:图像的高和宽
- dpi:图像对象的分辨率
- facecolor:背景颜色
- edgecolor:边框颜色
- frameon:表示是否显示边框
- 2.1.1 构造函数:fig = pyplot.figure(num,figsize,dpi,facecolor,edgecolor,frameon)
- 2.2 划分pyplot子图-下面是创建三个图表
pyplot.subplot(2,2,1)- pyplot.subplot(2,2,2)
- pyplot.subplot(2,2,3)
- 2.3 设置中文字体:pyplot.rgParams[“font.sans-serif”]=“SimHei”
- 2.4 添加标题
- 全局标题:suptitle()
- 子标题:title()
- 2.5 解决子图之间坐标轴的交叉问题
- 使用tight_layout()函数
- 2.6 散点图
- scatter(x,y,scale,color,marker,label)绘制
x,y:坐标(不可省略)
scale:数据点的大小
color:数据点的颜色
marker:数据点的样式
label:图例文字 - text(x,y,s,fontsize,color)函数
x,y:文字的坐标(不可省略)
s:显示的文字
fontsize:文字的大小
color:文字的颜色 - 坐标轴的设置:plt.rcParams[“axes.unicode_minus”]=False
xlebal(x,y,s,fontsize,color):设置x轴标签
ylebal(x,y,s,fontsize,color):设置y轴标签
xlim(xmin,xmax):设置x轴坐标的范围
ylim(ymin,ymax):设置y轴坐标的范围
tick_params(labelsize):设置刻度文字的字号
- scatter(x,y,scale,color,marker,label)绘制
- 2.7 折线图:
- 构造函数plot(x,y,color,marker,label,linewidth,markersize)
x,y:数据点的坐标
color:数据点的颜色
marker:数据点的样式
label:图例文字
linewidth:折线的宽度
markersize:数据点的大小
- 构造函数plot(x,y,color,marker,label,linewidth,markersize)
- 2.8 柱形图
- 构造函数:bar(left,height,width,facecolor,edgecolor,label)
left
height:条纹的高度
width:条纹的宽度
facecolor:条纹的颜色
edgecolor:条纹的背景色
label:该条纹的文字
- 构造函数:bar(left,height,width,facecolor,edgecolor,label)
Keras数据集库
- 1 功能
Keras是一个高层的神经网络和深度学习库,可以快速搭建神经网络模型,非常易于调试和扩展,内置了一些常用的公共数据集,可以通过Keras.datastes模块加载和访问,它已经成为TensorFlow的官方API - Keras中集成的数据库
- boston_housing :波士顿房价数据集
- CIFAR10 :10中类别的图片集
- CIFAR100 :100中类别的图片集
- MNIST :手写数据图片集
- Fashion-MNIST :10中时尚类别的图片集
- IMDB :电影点评数据集
- reuters :路透社新闻数据集
- 2 波士顿房价预测案例
- 2.1 数据集
- 2.1 数据集
- 2.2 加载数据集
import tensorflow as tf
#boston_housing是数据集名称
boston_housing = tf.keras.datasets.boston_housing
#加载数据集:-->数据集加载提示,本地默认地址C:\Users\user_name\.keras\datasets\boston_housing.npz(npz是一种数据存储压缩格式)
#train_x,train_y训练集的属性和房价;test_x,test_y测试集的属性和房价
(train_x,train_y),(test_x,test_y) = boston_housing.load_data()
- 2.3 平均房价数据集可视化
- 2.4 循环方法13个属性与房价的可视化
结果
============================
3 数字图像基础
3.1 基本概念
- 图像的离散化
-
连续图像:人眼直接感受到的图像
-
数学图像:把连续的图像数字化、离散化之后的图像,它是对连续图像的一种近似
-
像素:数字图像中的一个最小单元
-
位图:通过记录每一个像素值来存储和表达的图像
-
色彩深度/位深度:位图中每一像素点要用多少个二进制位来表示
-
BMP格式:Windows系统的标准位图格式
-
二值图像:每个像素只有2种可能的取值,也就是黑白图像使用1位二进制来表示,位深度为1
-
灰度图像:每个像素使用一个字节表示,位深度为8,可以表示256中级别的灰度。0表示黑色;255表示白色
-
彩色(RGB)图像
每个像素都都有红(R)绿(G)蓝(B)三个分量,一个像素点使用3个字节,位深度为24,可以表示256256256中颜色 -
RGBA图像
RGB图像+8位透明度信息Alpha -
数字图像如何显示?
将图像进行数字化,每一个图像都是一个个像素组成,通过位图来还原成原图像。 -
图像类型
-
序列图像
时间上有一定顺序和间隔、内容上相关的一组图像,其中每幅图像称为帧图像,帧图像之间的时间间隔是固定的
-
深度图像
是一种三维场景信息的表达式,每个像素点的取值代表着这个点离摄像机的距离,采用灰度图表示
-
-
图像存储格式
- JPEG格式
- 有损 压缩
- 压缩率高,所占空间小
- 适合于色彩丰富、细节清晰细腻的大图像
- 不适合所含颜色较少,具有大块颜色相近的区域,或者亮度差异十分明显的简单图片
- PNG格式
- 无损压缩
- 适合于有规律渐变色彩的图像
- GIF格式
- 支持静态格式和动态格式
- 动态图片有多幅图片保存为一个图片,循环显示,形成动画效果
- 只支持256色,适用于色彩简单,颜色较少的小图像
- JPEG格式
-
3.2 Pillow图像处理库-其他有(skimage,cv2)
- Pillow图像库的概念
Pillow是Python里的图像处理库(PIL:Python Image Library)提供了广泛的文件格式支持,强大的处理能力,主要包括图像存储、图像显示、格式转换以及基本的图像处理操作等。结合matplotlib的子库pyplot库显示图像 - 图像操作
- Image.open():打开图像获取图像对象
- 图像对象.save(文件路径):保存图像
- 图像对象的主要属性
- 图像对象.format:图像格式
- 图像对象.size:图像尺寸
- 图像对象.mode:色彩模式
- pyplot.imshow(image对象/numpy数组):对图像进行处理并显示格式
- pyplot.show():将图像进行处理
- 转换图像的色彩模式
- 颜色通道的分离与合并
split函数是将彩色图像分离成三种颜色RGB,然后可以通过merge函数将这三个RGB图像进行合并成彩色图像 - 图像对象在计算机中的存储原理
计算机处理图像时,有时先把图像转换成数组,数组中的元素对应图像中的每个像素,然后进行逐像素地处理 - np.array(图像对象):将图像对象转换成数组
- 对图像的缩放、旋转和镜像
-
缩放图像
-
图像旋转
-
- 剪裁图像
3.3 手写图像数据集
4 TensorFlow基础
#更新到最新版本
pip install --uptrade tensorflow
pip install --upgrade tensorflow-gpu
#查看版本号
import tensorflow as tf
print(tf.__version__)
- 4.1 TensorFlow2.4的新特性
- 参数服务器策略
- 多工作镜像策略
- 混合精度
- 优化器
- GPU支持
- 4.2 TensorFlow的丰富开源社区(GitHub)
- 图像分类
- 音频处理
- 推荐系统
- 自然语言处理
- 4.3 python列表list、numpy数组、TensorFlow张量对比
- 4.4 TensorFlow与numpy关系
TensorFlow的基本运算、参数命名、运算规则、API设计等于numpy非常相近。
在TensorFlow中,所有的运算都是在张量之间进行的
Numpy数组仅仅作为输入和输出来使用
张量可以运行与GPU ,CPU,而numpy只能在CPU中运行 - 4.5 创建Tensor对象
-
创建格式
-
创建全0张量和全1张量
tf.zeros(shape,dtype = tf.float32)
tf.ones(shape,dtype = tf.float32) -
创建元素值都相同的张量–tf.fill()函数
tf.fill(dims,value):dims是形状相当于shape
tf.constant(value,shape)
以上两种方法都可以达到相同的效果 -
创建随机数张量–正态分布
tf.random.normal(shape,mean,stddev,dtype)
shape:形状;mean:均值(0);stddev(1):标准差 -
创建随机数张量–截断正态分布
tf.random.truncated_normal(shape,mean,stddev,dtype)
返回一个截断正态分布,截断标准是2倍的标准差 -
设置随机数种子
tf.random.set_seed()函数 -
创建均匀分布张量
tf.random,uniform()汗水 -
随机打乱张量
tf.random.shuffle()函数 -
创建序列:tf.range(start,limit,delta=1,dtype)函数
-
创建张量总结
’ -
张量元素的数据类型
-
张量的属性-----ndim:维度,shape:形状,dtype:类型
-
tf.constant():改变张量中的数据类型
-
张量的维度变换
import tensorflow as tf a=tf.range(24)#生成序列张量:一维张量 b=tf.reshape(a,[2,3,4])#将张量转换维度成三维张量
-
多维张量的轴:张量的维度
-
增加和删除张量的维度
-
增加维度:tf.expand_dims(input,axis);
input:传入的张量
axis:增加的维度的序号
-
删除维度:tf.squeese(input,axis)
input:传入的张量
axis:删除的维度的序号
-
-
交换维度:tf.transpose(a,perm)
a:张量;perm:张量轴的顺序 -
张量的拼接和分割
- 拼接张量tf.contact(tensors,axis)
- 分割张量(将一个张量拆分成多个张量,分割后维度不变):
- tf.split(value,num_or_size_splits,axis)
value;待分割的张量
num_or_size_splits:分割的方案:分成几个张量
axis:按照哪个轴分割
-
张量的堆叠和分解
- 堆叠张量(合并张量时,创建一个新的维度):tf.stack(values,axis)
- 分解张量(将张量分解成多个张量,分解后得到的每个张量和原来的张量相比,维数都少了一维):tf.unstack(valus,axis)
-
张量的部分采样
- 索引和切片
- 索引:对张量中元素进行获取
- 切片:对张量进行截取【起始位置:结束位置:步长】
- 索引和切片
-
张量运算
- 基本数学运算
- 幂指对数运算
- 其他运算
- 三角函数和反三角函数运算
- 重载运算符
- 基本数学运算
-