栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

2021-10-16

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-16

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(…): 二维深度可分离卷积层

  1. input
    tf.layers.Input() 这个方法是用于输入数据的方法,其实类似于 tf.placeholder,相当于一个占位符的作用,当然也可以通过传入 tensor 参数来进行赋值。

  2. batch_normalization
    此方法是批量标准化的方法,经过处理之后可以加速训练速度,其定义在
    参考:https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization

  3. dense
    dense,即全连接网络,layers 模块提供了一个 dense() 方法来实现此操作,定义在 tensorflow/python/layers/core.py 中,下面我们来说明一下它的用法。

  4. convolution
    convolution,即卷积,这里提供了多个卷积方法,如 conv1d()、conv2d()、conv3d(),分别代表一维、二维、三维卷积,另外还有 conv2d_transpose()、conv3d_transpose(),分别代表二维和三维反卷积,还有 separable_conv2d() 方法代表二维深度可分离卷积。它们定义在 tensorflow/python/layers/convolutional.py 中,其用法都是类似的,在这里以 conv2d() 方法为例进行说明。

  5. pooling
    pooling,即池化,layers 模块提供了多个池化方法,这几个池化方法都是类似的,包括 max_pooling1d()、max_pooling2d()、max_pooling3d()、average_pooling1d()、average_pooling2d()、average_pooling3d(),分别代表一维二维三维最大和平均池化方法,它们都定义在 tensorflow/python/layers/pooling.py 中

  6. dropout
    dropout 是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃,可以用来防止过拟合,layers 模块中提供了 dropout() 方法来实现这一操作,定义在 tensorflow/python/layers/core.py。

  7. flatten
    flatten() 方法可以对 Tensor 进行展平操作,定义在tensorflow/python/layers/core.py

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/326008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号