通常,卷积层之后是池化层,池化层基本上总结了由池化的接收场确定的邻域中的输出特征映射激活。 例如,一个`2 x 2`的接收场将收集四个相邻的输出特征映射激活的本地信息。 对于最大池操作,将选择四个激活的最大值作为输出,而对于平均池化,将选择四个激活的平均值。 合并降低了特征映射的空间分辨率。 例如,对于具有`2 x 2`接收场的`224 x 224`尺寸的特征映射池化操作,特征映射的空间尺寸将减小为`112 x 112`。
通常,卷积层之后是池化层,池化层基本上总结了由池化的接收场确定的邻域中的输出特征映射激活。 例如,一个`2 x 2`的接收场将收集四个相邻的输出特征映射激活的本地信息。 对于最大池操作,将选择四个激活的最大值作为输出,而对于平均池化,将选择四个激活的平均值。 合并降低了特征映射的空间分辨率。 例如,对于具有`2 x 2`接收场的`224 x 224`大小的特征映射池化操作,特征映射的空间大小将减小为`112 x 112`。
要注意的一件事是,卷积运算减少了每层要学习的权重数。 例如,如果我们有一个空间尺寸为`224 x 224`的输入图像,而下一层的期望输出为尺寸为` 224 x 224 `的尺寸,那么对于具有完整连接的传统神经网络来说,要学习的权重数是`224 x 224 x 224 x 224`。对于具有相同输入和输出尺寸的卷积层,我们需要学习的只是滤波器内核的权重。 因此,如果我们使用`3 x 3`过滤器内核,我们只需要学习 9 个权重即可,而不是`224 x 224 x 224 x 224`权重。 这种简化是有效的,因为局部空间邻域中的图像和音频之类的结构之间具有高度相关性。
要注意的一件事是,卷积运算减少了每层要学习的权重数。 例如,如果我们有一个空间大小为`224 x 224`的输入图像,而下一层的期望输出为大小为` 224 x 224 `的大小,那么对于具有完整连接的传统神经网络来说,要学习的权重数是`224 x 224 x 224 x 224`。对于具有相同输入和输出大小的卷积层,我们需要学习的只是滤波器内核的权重。 因此,如果我们使用`3 x 3`过滤器内核,我们只需要学习 9 个权重即可,而不是`224 x 224 x 224 x 224`权重。 这种简化是有效的,因为局部空间邻域中的图像和音频之类的结构之间具有高度相关性。
在“基于深度学习的潜在因子模型”部分中,我们将使用这种嵌入方法基于`100K Movie Lens`数据集创建推荐系统。 数据集可以从`https://grouplens.org/datasets/movielens/`下载。
...
...
@@ -76,7 +76,7 @@
图 6.4:电影镜头 100 K 数据集上基于深度学习的潜在因子模型
`user_ID`和`movie_ID`从其相应的嵌入矩阵中提取用户和电影嵌入向量。 在该图中,`embedding_1`代表用户 ID 的嵌入层,而`embedding_2`代表电影 ID 的嵌入层。 在`dot_1`层中执行用户嵌入矢量和电影嵌入矢量的点积,以输出评分(一到五个)。 定义模型的代码如下所示:
`user_ID`和`movie_ID`从其相应的嵌入矩阵中提取用户和电影嵌入向量。 在该图中,`embedding_1`代表用户 ID 的嵌入层,而`embedding_2`代表电影 ID 的嵌入层。 在`dot_1`层中执行用户嵌入向量和电影嵌入向量的点积,以输出评分(一到五个)。 定义模型的代码如下所示:
@@ -388,17 +388,17 @@ Evaluation file written at: /home/santanu/ML_DS_Catalog-/captcha/evaluation.csv
SVHN 是一个现实世界的数据集,由于它在对象识别算法中的使用而在机器学习和深度学习领域中非常受欢迎。 顾名思义,该数据集包含从 Google Street View Images 获得的门牌号码的真实图像。 [可以从以下链接下载数据集](http://ufldl.stanford.edu/housenumbers/)。
最初的致密层具有`8192`单元,将其重塑为形状为`4 x 4 x 512`的三维张量。 使用`512`滤镜可以将张量视为`4 x 4`图像。 为了增加张量的空间尺寸,我们进行了一系列转置 2D 卷积,步幅为`2`,内核滤波器尺寸为`5 x5`。步幅大小决定了转置卷积的缩放比例。 例如,跨度为 2 的跨度将输入图像的每个空间尺寸加倍,然后进行转置卷积,通常会进行批归一化,以实现更好的收敛性。 除了激活层,网络使用`LeakyReLU`作为激活函数。 网络的最终输出是尺寸为`32 x 32 x 3`的图像。
最初的致密层具有`8192`单元,将其重塑为形状为`4 x 4 x 512`的三维张量。 使用`512`滤镜可以将张量视为`4 x 4`图像。 为了增加张量的空间大小,我们进行了一系列转置 2D 卷积,步幅为`2`,内核滤波器大小为`5 x5`。步幅大小决定了转置卷积的缩放比例。 例如,跨度为 2 的跨度将输入图像的每个空间大小加倍,然后进行转置卷积,通常会进行批归一化,以实现更好的收敛性。 除了激活层,网络使用`LeakyReLU`作为激活函数。 网络的最终输出是大小为`32 x 32 x 3`的图像。
@@ -269,7 +269,7 @@ class CustomLayer(tf.keras.layers.Layer):
前面的代码创建了一个名为`CustomLayer`的类,该类继承了`tf.keras.layers.Layer`类的属性。 此技术允许在`tf.keras`模型内部使用任何类型的低级代码,而不管它是使用`Sequential` API 还是`functional` API 的模型。 此类中有两种方法:
*`build()`:此方法修改继承的类的默认生成方法。 在这种方法中,应该创建模型所需的所有变量。 尽管可以在模型的`the __init__()`方法中完成此操作,但建议使用`build()`,以便在正确的最佳时间构建变量。 可以使用`self.add_weight`函数完成此操作,以使 Keras 跟踪变量和正则化损失。