- 2024-12-17
-
发表了主题帖:
《深度学习的数学——使用Python语言》①基础环境搭建
# 《深度学习的数学——使用Python语言》①基础环境搭建
[**① 环境搭建和概率论基础**](https://bbs.eeworld.com.cn/thread-1302019-1-1.html)
感谢eeworld提供这次机会。这是我第一次入围类似的活动,收到书的时候还是很激动的。以至于在上班路上就读完了第一章。(拖到现在才写完第一篇 😣)
***书籍样式***
目前收到书已经一个星期了,用了前面三天的时间把前两章读完。书籍中的示例代码是在Linux系统下运行,所以打算趁这次机会熟悉Linux,这次就在Linux系统下进行学习。
后面的时间就一直在配置Linux系统的环境,把我的笔记本换成Ubuntu系统进行使用(以前装过双系统,还有虚拟机,但是有windows环境的情况下,还是会一直用windows,这次为了逼自己用起来,索性直接换到Linux系统进行使用)。一直拖到到周末准备工作才算彻底完成。
接下来进入正文。
# 书籍感悟
收到书后,发现他没有想象中的厚(潜意识里会觉得书的薄厚和书本包含的内容是有关系的)。入围前看的介绍目录总共会有十一章,介绍页面的图片看起来也觉得实书会比较厚,所以下意识里会觉得这是一本很有份量的书(~~果然图片仅供参考~~)。
***介绍页书籍样式***
阅读之后,感觉内容还是很有份量的。作者对书的定位还是挺准确的,这是一本适合对python有一定基础,且有一定的数学基础的人学习深度学习的参考书。他没有深奥的公式推导,对于相关数学原理他尽量使用简单的公式并辅以代码仿真。在刚开始学习的阶段,还是非常友好的。本书更侧重于培养我们的实际动手能力。
第一章是环境搭建。虽然书籍的代码是运行在Linux系统下,但是作者也贴心的介绍了Windows和macOS下的环境配置步骤。
后续就是介绍需要安装的几个库的基本作用还有展示了一些用法。本章中主要安装以下几个库:
- **numpy** : 对数组操作的库。
- **scipy** :拥有大量的函数库。
- **matplotlib** : 绘图库。
- **scikit-learn** : 神经网络模型相关库。
第二章是概率论基础,主要介绍一些概率论中的基本概念和一些法则,最后还介绍了联合概率和边缘概率的相关知识。
# 实验过程
## 第一章实验
第一章的实验主要是对安装的几个库的介绍
### 实验一:Numpy的使用
首先导入模块,验证版本信息。
```
>>>import numpy as np
>>> np.__version__
'1.26.4'
```
numpy后面部分的实验包含怎么定义数组,数据类型,二维数组,全0和全1数组,高级索引以及读写磁盘几个部分。示例代码都是运行在命令行中。
#### 定义数组
在进行数据运算的时候,使用数组的效率会很高,所以可以用np.array函数把列表转换为数组,a还包含size,shape,dtype属性。shape有两个元素分别对应行和列。
```
>>> a=np.array([1,2,3,4])
>>> a.size
4
>>> a.shape
(4,)
>>> a.dtype
dtype('int32')
>>> b=np.array([[1,2,3,4],[5,6,7,8]])
>>> print(b)
[[1 2 3 4]
[5 6 7 8]]
>>> b.shape
(2, 4)
```
#### 数据类型
numpy底层是用c语言实现的,所以numpy支持c语言中的所有数据类型,我们既可以让numpy自动选择数据类型,也可以显示指定。
```
>>> a=np.array([1,2,3,4],dtype="uint8")
>>> a.dtype
dtype('uint8')
>>> a=np.array([1,2,3,4],dtype="int16")
>>> a=np.array([1,2,3,4],dtype="uint32")
>>> b=np.array([1,2,3,4.0])
>>> b.dtype
dtype('float64')
>>> b=np.array([1,2,3,4.0],dtype="float32")
>>> c=np.array([111,222,333,444],dtype="uint8")
>>> c
array([111, 222, 77, 188], dtype=uint8)
```
#### 二维数组
把列表转换为数组得到一维向量,把列表的列表转换为数组得到二维向量。
```
>>> d=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> d.shape
(3, 3)
>>> d.size
9
>>> d
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
```
#### 全0和全1数组
numpy有两个有用的初始化函数:np.zeros和np.ones。可以指定数组大小,并置为全0或全1。
```
>>> a=np.zeros((3,4),dtype="uint32")
>>> a[0,3] = 42
>>> a[1,1] = 66
>>> a
array([[ 0, 0, 0, 42],
[ 0, 66, 0, 0],
[ 0, 0, 0, 0]], dtype=uint32)
>>> b=11*np.ones((3,1))
>>> b
array([[11.],
[11.],
[11.]])
```
#### 高级索引
numpy支持简单索引也可以进行切片索引,用法和python中一样。
```
>>> a=np.arange(12).reshape((3,4))
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> a[1]
array([4, 5, 6, 7])
>>> a[1]=[44,55,66,77]
>>> a
array([[ 0, 1, 2, 3],
[44, 55, 66, 77],
[ 8, 9, 10, 11]])
>>> a=np.arange(12).reshape((3,4))
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> a[1]
array([4, 5, 6, 7])
>>> a[1]=[44,55,66,77]
>>> a
array([[ 0, 1, 2, 3],
[44, 55, 66, 77],
[ 8, 9, 10, 11]])
>>> a[:2]
array([[ 0, 1, 2, 3],
[44, 55, 66, 77]])
>>> a[:2,:]
array([[ 0, 1, 2, 3],
[44, 55, 66, 77]])
>>> a[:2,:3]
array([[ 0, 1, 2],
[44, 55, 66]])
>>> b=np.arange(12)
>>> b
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> b[::2]
array([ 0, 2, 4, 6, 8, 10])
>>> b[::3]
array([0, 3, 6, 9])
>>> b[::-1]
array([11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
>>> a=np.arange(24).reshape((4,3,2))
>>> a
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17]],
[[18, 19],
[20, 21],
[22, 23]]])
>>> a[1,:,:]=[[11,22],[33,44],[55,66]]
>>> a
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[11, 22],
[33, 44],
[55, 66]],
[[12, 13],
[14, 15],
[16, 17]],
[[18, 19],
[20, 21],
[22, 23]]])
>>> a[2,...]=[[99,99],[99,99],[99,99]]
>>> a
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[11, 22],
[33, 44],
[55, 66]],
[[99, 99],
[99, 99],
[99, 99]],
[[18, 19],
[20, 21],
[22, 23]]])
```
#### 读写磁盘
numpy可以调用np.save把数据保存在本地也可以通过np.load从本地加载。
```
>>> a=np.random.randint(0,5,(3,4))
>>> a
array([[1, 2, 0, 4],
[1, 4, 0, 2],
[0, 0, 3, 2]])
>>> np.save("random.npy",a)
>>> b=np.load("random.npy")
>>> b
array([[1, 2, 0, 4],
[1, 4, 0, 2],
[0, 0, 3, 2]])
```
### 实验二:SciPy的使用
SciPy 是一个开源的 Python 库,旨在为科学计算提供高效的算法和数学工具。它建立在 NumPy 基础之上,扩展了许多高级功能,涉及的领域包括数值积分、优化、信号处理、线性代数、统计分析等。
scipy的只有一个简单的实验,关于t检验。
首先还是导入模块
```
>>> import numpy as np
>>> import scipy
>>> scipy.__version__
'1.14.1'
```
随机生成三个数组,并对他们进行t检验。a,b,c都是取自高斯曲线,他们只是均值和标准差不同。normal函数的前一个参数定义均值,后一个定义标准差。均值觉得曲线的对称中心,标准差决定的曲线的宽度。
其中a,b的均值一样,a,c的标准差一样。
```
>>> from scipy.stats import ttest_ind
>>> a=np.random.normal(0,1,1000)
>>> b=np.random.normal(0,0.5,1000)
>>> c=np.random.normal(0.1,1,1000)
>>> ttest_ind(a,b)
TtestResult(statistic=-0.46835586027423864, pvalue=0.6395812165361968, df=1998.0)
>>> ttest_ind(a,c)
TtestResult(statistic=-2.3566057547650168, pvalue=0.01853885989238996, df=1998.0)
```
### 实验三:matplotlib的使用
matplotlib是python中常用的画图库,可以绘制二维图像和三维图像。
#### 二维图像
```
>>> import numpy as np
>>> import matplotlib.pylab as plt
>>> x = np.random.random(100)
>>> plt.plot(x)
[]
>>> plt.show()
```
***二维图像绘制示例***
#### 三维图像
```
>>> import numpy as np
>>> import matplotlib.pylab as plt
>>> from mpl_toolkits.mplot3d import Axes3D
>>> x = np.random.random(20)
>>> y = np.random.random(20)
>>> z = np.random.random(20)
>>> fig=plt.figure()
>>> ax=fig.add_subplot(111,projection='3d')
>>> ax.scatter(x,y,z)
>>> plt.show()
```
***三维图像绘制示例***
### 实验四:scikit-learn的使用
这个实验用sklearn这个库构建了一个简单的神经网络模型。虽然本书侧重深度学习的数学知识但是用一两个简单的简单的模型更有助于我们理解。这里的实验是在py文件中运行。
```
import numpy as np
from sklearn.datasets import load_digits
from sklearn.neural_network import MLPClassifier
d=load_digits()
digits = d["data"]
labels = d["target"]
N=200
idx = np.argsort(np.random.random(len(labels)))
x_test,y_test=digits[idx[:N]],labels[idx[:N]]
x_train,y_train=digits[idx[N:]],labels[idx[N:]]
clf = MLPClassifier(hidden_layer_sizes=(128,))
clf.fit(x_train,y_train)
score= clf.score(x_test,y_test)
pred =clf.predict(x_test)
err = np.where((y_test!=pred))[0]
print("score:",score)
print("errors:")
print("actual:",y_test[err])
print("predicted:",pred[err])
```
运行结果
>score: 0.98
>errors:
>actual: [6 7 9 3]
>predicted: [5 8 3 8]
# 实验感悟
第一章的实验都是比较简单基础的,主要是熟悉书籍后续的操作环境。
# 后续计划
感觉这一章的篇幅有点长,所以第二章的实验部分就不在这篇更新了,留到下一章和第三章一起发布,正好他们都是概率论部分。争取在下周末前可以发布下一篇。(┬┬﹏┬┬)
(刚开始写博客,有需要改进的地方,佬们可以多提提意见)
- 2024-12-05
-
回复了主题帖:
读书活动入围名单: 《深度学习的数学——使用Python语言》
个人信息无误,确认可以完成阅读分享计划
- 2024-05-14
-
加入了学习《小梅哥FPGA入门到实践特训班全程高清实录(2019)》,观看 使用移位寄存器实现一行数据寄存
-
加入了学习《小梅哥FPGA入门到实践特训班全程高清实录(2019)》,观看 RAW数据流转换到RGB888图像数据原理分析