非常感谢电子工程世界提供了这样一个宝贵的学习机会!恰好近期在项目中需要借助深度学习解决实际问题。虽然已经接触过一些基础知识,但在原理层面的理解仍然不够透彻。因此,我希望通过这本书能够补全短板,为后续工作提供理论支撑和实践指导。
# 图书展示
以下是图书的内容概要:
这本书并不是一部深度学习的入门教程,而是一部为读者解决实际问题铺路的“数学武器库”。它系统地讲解了构建和训练神经网络所需的核心数学知识,包括 概率论、线性代数和微积分 等。同时,它还深入浅出地阐述了神经网络的工作原理和训练机制,帮助我们在了解基础数学的同时,更好地理解深度学习模型背后的逻辑。
需要注意的是,本书对读者的知识储备有一定要求——建议在学习本书之前对深度学习有初步的了解。
# 环境搭建
书中推荐的Python版本为 3.8.5,当然更高版本也可以兼容。需要安装的核心工具包包括:
- numpy:科学计算的基础库,处理多维数组和矩阵运算的利器;
- scipy:高级科学计算库;
- matplotlib:用于绘图和数据可视化;
- scikit-learn:提供经典机器学习模型和数据处理工具。
以上工具通过 pip 命令即可轻松安装:
```bash
pip install numpy scipy matplotlib scikit-learn
```
# 基础工具使用
在第一章中,详细介绍了numpy工具的使用,并简要介绍了scipy、matplotlib,在最后使用scikit-learn完成了一个简单的手写数字识别网络。我们主要来学习一下numpy的使用。
## numpy
numpy 是科学计算的核心工具。在使用之前,我们首先需要将numpy模块导入:
```python
import numpy as np
```
### 定义数组
Numpy以数组为运算对象,可提供了将 Python 列表快速转换为数组的方法,并可通过 shape 和 size 查看数组形状与大小,首先以一维数组为例:
```python
a = np.array([1,2,3,4])
a
a.shape
a.size
```
之后我们尝试更高维的数组
这里我们使用到了np.arrange函数,它的作用类似于python中的range,之后我们将它reshape成了形状为(3,2,2)的数组。
### 数据类型
由于numpy底层是用C实现的,因此其支持C中的所有数据类型,包括:float64、float32、int64、uint64、int32、uint32、uint8等。
在创建数组时,numpy默认情况下会根据数据自动推断类型。但是与在C中类似,我们需要注意数据溢出的情况,在高精度计算或防止溢出时,可以手动指定数据类型,从而避免运算错误。
下面是对uint8类型的数组赋了一个500的值,
```python
a= np.array([1,2,500],dtype="uint8")
```
可以看到系统只是给出了一个警告,但是并没有报错。但是打印出来的数据中500变成了244,这是由于numpy默认只保留这个数的最后8位。
### 数据索引
在numpy中,其还支持复杂的索引方式,常用的是使用单个索引查询整个子数组:
```
a=np.arange(12).reshape((3,2,2))
a[1]
a
```
此外,类似于python,还支持切片索引的方式
### 数据保存与读取
numpy支持使用np.load和np.save进行数据的读取和保存。其中数组文件必须保存为".npy"为后缀,如果没有指定,其会自动添加该后缀。
```python
np.save('a.npy',a)
np.load('a.npy')
```
# 阅读感悟
第一章不仅让我重新认识了 Numpy 的强大功能,也让我对深度学习中数据处理的重要性有了更深的理解。作为数学工具,它为后续模型的搭建和训练奠定了坚实的基础。
期待接下来的学习中,能够进一步掌握概率论与微积分在深度学习中的具体应用,同时提升自己解决实际问题的能力!