读书笔记——python深度学习

第一部分 深度学习基础

第一章 什么是深度学习

学习指的是,寻找更好数据表示方法的自动搜索过程。
“深度”指的并不是利用这种方法所获取的更深层次的理解,而是指一系列连续的表示层。数据模型中包含多少层,这被称为模型的深度

机器学习是将输入(比如图像)映射到目标(比如标签“猫”),这一过程是通过观察许多输入和目标的示例来完成的。

第二章 神经网络的数学基础

分类问题中的某个类别叫作类(class)。数据点叫作样本(sample)。某个样本对应的类叫作标签(label)

2.1 简单步骤

1.加载 Keras 中的 MNIST 数据集
from keras.datasets import mnist

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

train_images 和 train_labels 组成了训练集(training set),模型将从这些数据中进行
学习。然后在测试集(test set,即 test_images 和 test_labels)上对模型进行测试。
图像被编码为 Numpy 数组,而标签是数字数组,取值范围为 0~9。图像和标签一一对应。

2. 网络架构
from keras import models
from keras import layers

network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))#将返回一个由 10 个概率值(总和为 1)组成的数组。每个概率值表示当前数字图像属于 10 个数字类别中某一个的概率

神经网络的核心组件是层(layer),它是一种数据处理模块,你可以将它看成数据过滤器。

3.编译
network.compile(optimizer='rmsprop',
 loss='categorical_crossentropy',
 metrics=['accuracy'])

要想训练网络,我们还需要选择编译(compile)步骤的三个参数。

  • 损失函数(loss function):网络如何衡量在训练数据上的性能,即网络如何朝着正确的方向前进。

  • 优化器(optimizer):基于训练数据和损失函数来更新网络的机制。

  • 在训练和测试过程中需要监控的指标(metric):本例只关心精度,即正确分类的图像所占的比例。

4.准备图像数据

在开始训练之前,我们将对数据进行预处理,将其变换为网络要求的形状,并缩放到所有值都在 [0, 1] 区间。比如,之前训练图像保存在一个 uint8 类型的数组中,其形状为(60000, 28, 28),取值区间为 [0, 255]。我们需要将其变换为一个 float32 数组,其形状为 (60000, 28 * 28),取值范围为 0~1。

train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255

test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255
5.准备标签

还需要对标签进行分类编码

from keras.utils import to_categorical

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
6.开始训练网络

现在我们准备开始训练网络,在 Keras 中这一步是通过调用网络的 fit 方法来完成的——
我们在训练数据上拟合(fit)模型。

network.fit(train_images,train_labels,epochs=5,batch_size=128)

2.2 神经网络的数据表示

前面例子中,数据存储在多维Numpy数组中,也叫张量(tensor)。
什么是张量?
张量事一个数据容器,是矩阵向任意维度的推广(张量的维度(dimension)通常叫做轴(axios))

2.2.1 标量(0D 张量)

仅包含一个数字的张量叫作标量(scalar,也叫标量张量、零维张量、0D 张量).

2.2.2 向量(1D 张量)

数字组成的数组叫作向量(vector)或一维张量(1D 张量)。一维张量只有一个轴。
array([12, 3, 6, 14, 7])
这个向量有 5 个元素,所以被称为 5D 向量。
5D 向量只有一个轴,沿着轴有 5 个维度,而 5D 张量有 5 个轴(沿着每个轴可能有任意个维度)。

2.2.3 矩阵(2D张量)

向量组成的数组叫做矩阵(matrix)或二维张量(2D张量)。矩阵有两个轴。
x = np.array([[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]])

第一个轴上的元素叫做行,第二个轴上的元素叫做列。
[5, 78, 2, 34, 0] 是 x 的第一行,[5, 6, 7] 是第一列。

2.2.4 3D张量与更高维张量

将多个矩阵组合成一个新的数组,可以得到一个3D张量,你可以将其直观地理解维数字组成的立方体。

2.2.5 关键属性

张量是由以下三个关键属性来定义的。

  • 轴的个数(阶)。
  • 形状。这是一个整数元素,表示张量沿每个轴的维度大小。例如,前面矩阵实力的形状为(3,5),3D张量实例的形状为(3,3,5)。向量的形状只包含一个元素,比如(5,),而标量的形状为空,即()。
  • 数据类型。数据类型(在 Python 库中通常叫作 dtype)。这是张量中所包含数据的类型,例如,张量的类型可以是 float32、uint8、float64 等。
2.2.6 在Numpy中操作张量

我们使用train_images[i]来选择沿着第一个轴的特定数字。选择张量的特定元素叫做张量切片。

2.2.7 数据批量的概念

通常来说,深度学习中所有数据张量的第一个轴都是样本轴。在MNIST的例子中,样本就是数字图像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值