TensorFlow-similarity 学习笔记3
2021SC@SDUSC
Model definition SimilarityModel()模型扩展了tensorflow.keras.model.Model,具有额外的功能和功能,允许索引和搜索类似示例。 如下方模型定义所示,相似性模型使用 MetricEmbedding() 层输出 64 维浮点数嵌入。此层是具有 L2 normalization的Dense layer。由于loss,模型可以学会最大限度地缩短类似示例之间的距离,并最大限度地扩大不同示例之间的距离。因此,嵌入空间中示例之间的距离是有意义的:距离越小,示例越相似。 能够使用距离作为两个示例的类似程度的有意义的原则,是启用fast ANN(近邻)搜索的原因。使用线性时间下的 ANN 搜索而不是标准二次 NN 搜索是允许深度相似性搜索扩展到数百万个项目的原因。此笔记本中使用的内置内存索引很容易缩放到一百万个索引示示例。如果你有足够的内存:)
def get_model():
inputs = layers.Input(shape=(28, 28, 1))
x = layers.experimental.preprocessing.Rescaling(1/255)(inputs)
x = layers.Conv2D(32, 7, activation='relu')(x)
x = layers.Conv2D(32, 3, activation='relu')(x)
x = layers.MaxPool2D()(x)
x = layers.Conv2D(64, 7, activation='relu')(x)
x = layers.Conv2D(64, 3,activation='relu')(x)
x = layers.Flatten()(x)
x = layers.Dense(64, activation='relu')(x)
outputs = MetricEmbedding(64)(x)
return SimilarityModel(inputs, outputs)
model = get_model()
model.summary()
Model: “similarity_model_2"
Layer (type) Output Shape Param #
input_3 (InputLayer) [(None, 28, 28, 1)] 0
rescaling_2 (Rescaling) (None, 28, 28, 1) 0
conv2d_8 (Conv2D) (None, 26, 26, 32) 320
conv2d_9 (Conv2D) (None, 24, 24, 32) 9248
max_pooling2d_2 (MaxPooling2 (None, 12, 12, 32) 0
conv2d_10 (Conv2D) (None, 10, 10, 64) 18496
conv2d_11 (Conv2D) (None, 8, 8, 64) 36928
flatten_2 (Flatten) (None, 4096) 0
metric_embedding_3 (MetricEm (None, 64) 262208
Total params: 327,200 Trainable params: 327,200 Non-trainable params: 0
Layers, modules and models Layers模块属于TensorFlow的一个稳定的中层API,其源码位于tensorflow/python/layers/layers.py tf.nn,tf.layers, tf.contrib概述: (1)tf.nn :提供神经网络相关操作的支持,包括卷积操作(conv)、池化操作(pooling)、归一化、loss、分类操作、embedding、RNN、Evaluation。 (2)tf.layers:主要提供的高层的神经网络,主要和卷积相关的,个人感觉是对tf.nn的进一步封装,tf.nn会更底层一些。 (3)tf.contrib:tf.contrib.layers提供够将计算图中的 网络层、正则化、摘要操作、是构建计算图的高级操作,但是tf.contrib包含不稳定和实验代码,有可能以后API会改变。 以上三个模块的封装程度是逐个递进的。 tf.layers模块提供的API:
input(…): 用于实例化一个输入 Tensor,作为神经网络的输入。 average_pooling1d(…): 一维平均池化层 average_pooling2d(…): 二维平均池化层 average_pooling3d(…): 三维平均池化层 batch_normalization(…): 批量标准化层 conv1d(…): 一维卷积层 conv2d(…): 二维卷积层 conv2d_transpose(…): 二维反卷积层 conv3d(…): 三维卷积层 conv3d_transpose(…): 三维反卷积层 dense(…): 全连接层 dropout(…): Dropout层 flatten(…): Flatten层,即把一个 Tensor 展平 max_pooling1d(…): 一维最大池化层 max_pooling2d(…): 二维最大池化层 max_pooling3d(…): 三维最大池化层 separable_conv2d(…): 二维深度可分离卷积层
-
input tf.layers.Input() 这个方法是用于输入数据的方法,其实类似于 tf.placeholder,相当于一个占位符的作用,当然也可以通过传入 tensor 参数来进行赋值。 -
batch_normalization 此方法是批量标准化的方法,经过处理之后可以加速训练速度,其定义在 参考:https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization -
dense dense,即全连接网络,layers 模块提供了一个 dense() 方法来实现此操作,定义在 tensorflow/python/layers/core.py 中,下面我们来说明一下它的用法。 -
convolution convolution,即卷积,这里提供了多个卷积方法,如 conv1d()、conv2d()、conv3d(),分别代表一维、二维、三维卷积,另外还有 conv2d_transpose()、conv3d_transpose(),分别代表二维和三维反卷积,还有 separable_conv2d() 方法代表二维深度可分离卷积。它们定义在 tensorflow/python/layers/convolutional.py 中,其用法都是类似的,在这里以 conv2d() 方法为例进行说明。 -
pooling pooling,即池化,layers 模块提供了多个池化方法,这几个池化方法都是类似的,包括 max_pooling1d()、max_pooling2d()、max_pooling3d()、average_pooling1d()、average_pooling2d()、average_pooling3d(),分别代表一维二维三维最大和平均池化方法,它们都定义在 tensorflow/python/layers/pooling.py 中 -
dropout dropout 是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃,可以用来防止过拟合,layers 模块中提供了 dropout() 方法来实现这一操作,定义在 tensorflow/python/layers/core.py。 -
flatten flatten() 方法可以对 Tensor 进行展平操作,定义在tensorflow/python/layers/core.py
|