TensorFlow卷积网络经常使用函数参数详细总结

卷积操做html

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)python

除去name参数用以指定该操做的name,与方法有关的一共五个参数:算法

  • input: 
    指须要作卷积的输入图像,它要求是一个Tensor,具备[batch, in_height, in_width, in_channels]这样的shape具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数]注意这是一个4维的Tensor,要求类型为float32和float64其中之一;
  • filter 
    至关于CNN中的卷积核,它要求是一个Tensor,具备[filter_height, filter_width, in_channels, out_channels]这样的shape具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,有一个地方须要注意,第三维in_channels,就是参数input的第四维;表示的是卷积层的权重,权重的类型必须与数据的类型一致。
  • strides 
    卷积时在图像每一维的步长,这是一个一维的向量,长度4
  • padding string类型的量,只能是”SAME”,”VALID”其中之一,这个值决定了不一样的卷积方式,选项为"SAME"或"VALID",其中"SAME"表示添加全0填充,保证卷积前输入的矩阵和卷积后的输出矩阵大小一致,"VALID"表示不添加。
  • use_cudnn_on_gpu bool类型,是否使用cudnn加速,默认为true

结果返回一个Tensor,这个输出,就是咱们常说的feature map数组

 

防止过拟合缓存

tf.nn.dropout(x,keep_prob,noise_shape=None,seed=None, name=None)安全

x:指输入,输入tensordom

keep_prob: float类型,每一个元素被保留下来的几率,设置神经元被选中的几率,在初始化时keep_prob是一个占位符, keep_prob = tf.placeholder(tf.float32) 。tensorflow在run时设置keep_prob具体的值,例如keep_prob: 0.5异步

noise_shape  : 一个1维的int32张量,表明了随机产生“保留/丢弃”标志的shape。分布式

seed : 整形变量,随机数种子。ide

name:指定该操做的名字

dropout必须设置几率keep_prob,而且keep_prob也是一个占位符,跟输入是同样的

keep_prob = tf.placeholder(tf.float32)

train的时候才是dropout起做用的时候,test的时候不该该让dropout起做用

 

tf.truncated_normal(shape,mean=0.0, stddev=1.0,dtype=tf.float32,seed=None,name=None)

从截断的正态分布中输出随机值。生成的值遵循具备指定平均值和标准误差的正态分布,不一样之处在于其平均值大于 2 个标准差的值将被丢弃并从新选择。

shape:一维整数张量或 Python 数组,输出张量的形状。

mean:dtype 类型的 0-D 张量或 Python 值,截断正态分布的均值。

stddev:dtype 类型的 0-D 张量或 Python 值,截断前正态分布的标准误差。

dtype:输出的类型。

seed:一个 Python 整数。用于为分发建立随机种子。查看tf.set_random_seed行为。

name:操做的名称(可选)。

        函数返回值:tf.truncated_normal函数返回指定形状的张量填充随机截断的正常值。

 

最大值池化操做

tf.nn.max_pool(value, ksize, strides, padding, name=None)

参数是四个,和卷积很相似:

value:须要池化的输入,通常池化层接在卷积层后面,因此输入一般是feature map,依然是[batch, height, width, channels]这样的shape

ksize:池化窗口的大小,取一个四维向量,通常是[1, height, width, 1],由于咱们不想在batch和channels上作池化,因此这两个维度设为了1

strides:和卷积相似,窗口在每个维度上滑动的步长,通常也是[1, stride,stride, 1]

padding:和卷积相似,能够取'VALID' 或者'SAME'

返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式

 

两个矩阵中对应元素各自相乘

 tf.multiply(x, y, name=None) 

参数:

x: 一个类型为:half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128的张量。

y: 一个类型跟张量x相同的张量。  

返回值: x * y element-wise.  

注意: 

(1)       multiply这个函数实现的是元素级别的相乘,也就是两个相乘的数元素各自相乘,而不是矩阵乘法,注意和tf.matmul区别。 

(2)       两个相乘的数必须有相同的数据类型,否则就会报错。

 

将矩阵a乘以矩阵b,生成a * b

 tf.matmul(a, b, transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None) 

参数: 

a: 一个类型为 float16, float32, float64, int32, complex64, complex128 且张量秩 > 1 的张量。 

b: 一个类型跟张量a相同的张量。 

transpose_a: 若是为真, a则在进行乘法计算前进行转置。 

transpose_b: 若是为真, b则在进行乘法计算前进行转置。 

adjoint_a: 若是为真, a则在进行乘法计算前进行共轭和转置。 

adjoint_b: 若是为真, b则在进行乘法计算前进行共轭和转置。 

a_is_sparse: 若是为真, a会被处理为稀疏矩阵。 

b_is_sparse: 若是为真, b会被处理为稀疏矩阵。 

name: 操做的名字(可选参数) 

返回值:一个跟张量a和张量b类型同样的张量且最内部矩阵是a和b中的相应矩阵的乘积。 

注意: 

(1)输入必须是矩阵(或者是张量秩 >2的张量,表示成批的矩阵),而且其在转置以后有相匹配的矩阵尺寸。 

(2)两个矩阵必须都是一样的类型,支持的类型以下:float16, float32, float64, int32, complex64, complex128。 

引起错误: 

ValueError: 若是transpose_a 和 adjoint_a, 或 transpose_b 和 adjoint_b 都被设置为真

 

TF-激活函数 tf.nn.relu

tf.nn.relu(features, name = None)

做用:

计算激活函数 relu,即 max(features, 0)。即将矩阵中每行的非最大值置0。是将大于0的数保持不变,小于0的数置为0,计算修正线性单元(很是经常使用):max(features, 0).而且返回和feature同样的形状的tensor。

参数:

features: tensor类型,必须是这些类型:A Tensor. float32, float64, int32, int64, uint8, int16, int8, uint16, half.

name: :操做名称(可选)

 

重塑张量

reshape( tensor, shape, name=None )

参数:

  • tensor:一个Tensor。
  • shape:一个Tensor;必须是如下类型之一:int32,int64;用于定义输出张量的形状。
  • name:操做的名称(可选)。

返回值:

该操做返回一个Tensor。与tensor具备相同的类型。

 

用于定义建立变量(层)的操做的上下文管理器。 

_init__( name_or_scope, default_name=None, values=None, initializer=None, regularizer=None, caching_device=None, partitioner=None, custom_getter=None, reuse=None, dtype=None, use_resource=None, constraint=None, auxiliary_name_scope=True )

参数:

  • name_or_scope:string或者VariableScope表示打开的范围。
  • default_name:若是name_or_scope参数为None,则使用默认的名称,该名称将是惟一的;若是提供了name_or_scope,它将不会被使用,所以它不是必需的,而且能够是None。
  • values:传递给操做函数的Tensor参数列表。
  • initializer:此范围内变量的默认初始值设定项。
  • regularizer:此范围内变量的默认正规化器。
  • caching_device:此范围内变量的默认缓存设备。
  • partitioner:此范围内变量的默认分区程序。
  • custom_getter:此范围内的变量的默认自定义吸气。
  • reuse:能够是True、None或tf.AUTO_REUSE;若是是True,则咱们进入此范围的重用模式以及全部子范围;若是是tf.AUTO_REUSE,则咱们建立变量(若是它们不存在),不然返回它们;若是是None,则咱们继承父范围的重用标志。当启用紧急执行时,该参数老是被强制为tf.AUTO_REUSE。
  • dtype:在此范围中建立的变量类型(默​​认为传入范围中的类型,或从父范围继承)。
  • use_resource:若是为false,则全部变量都将是常规变量;若是为true,则将使用具备明肯定义的语义的实验性 ResourceVariables。默认为false(稍后将更改成true)。当启用紧急执行时,该参数老是被强制为true。
  • constraint:一个可选的投影函数,在被Optimizer(例如用于实现层权重的范数约束或值约束)更新以后应用于该变量。该函数必须将表明变量值的未投影张量做为输入,并返回投影值的张量(它必须具备相同的形状)。进行异步分布式培训时,约束条件的使用是不安全的。
  • auxiliary_name_scope:若是为True,则咱们用范围建立一个辅助名称范围;若是为False,则咱们不接触名称范围。

返回值:

返回能够捕获和重用的范围。

可能引起的异常:

  • ValueError:在建立范围内尝试重用时,或在重用范围内建立时。
  • TypeError:某些参数的类型不合适时。

https://www.w3cschool.cn/tensorflow_python/tensorflow_python-61ue2ocp.html

 

计算张量的各个维度上的元素的平均值

reduce_mean(input_tensor, axis=None, keep_dims=False,name=None,reduction_indices=None )

参数:

  • input_tensor:要减小的张量。应该有数字类型。
  • axis:要减少的尺寸。若是为None(默认),则减小全部维度。必须在[-rank(input_tensor),      rank(input_tensor))范围内。
  • keep_dims:若是为true,则保留长度为1的缩小尺寸。
  • name:操做的名称(可选)。
  • reduction_indices:axis的不支持使用的名称。

返回:该函数返回减小的张量。numpy兼容性至关于np.mean

 

转换数据类型

tf.cast(x, dtype, name=None)  
将x的数据格式转化成dtype.例如,原来x的数据格式是bool,  
那么将其转化成float之后,就可以将其转化成0和1的序列。反之也能够

求最大值tf.reduce_max(input_tensor, reduction_indices=None, keep_dims=False, name=None)
求平均tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False,name=None)
参数1--input_tensor:待求值的tensor
参数2--reduction_indices:在哪一维上求解。

举例说明
# 'x' is [[1., 2.]
#         [3., 4.]]
x是一个2维数组,分别调用reduce_*函数以下:
首先求平均值:
tf.reduce_mean(x) ==> 2.5 #若是不指定第二个参数,那么就在全部的元素中取平均值
tf.reduce_mean(x, 0) ==> [2.,  3.] #指定第二个参数为0,则第一维的元素取平均值,即每一列求平均值
tf.reduce_mean(x, 1) ==> [1.5,  3.5] #指定第二个参数为1,则第二维的元素取平均值,即每一行求平均值

 

#使用优化算法使得代价函数最小化

tf.train.AdamOptimizer

__init__(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name='Adam')
此函数是Adam优化算法:是一个寻找全局最优势的优化算法,引入了二次方梯度校订。

相比于基础SGD算法,1.不容易陷于局部优势。2.速度更快!

 

计算交叉熵的代价函数

reduce_sum (input_tensor , axis = None , keep_dims = False ,  name = None , reduction_indices = None
此函数计算一个张量的各个维度上元素的总和。

函数中的input_tensor是按照axis中已经给定的维度来减小的;除非 keep_dims 是true,不然张量的秩将在axis的每一个条目中减小1;若是keep_dims为true,则减少的维度将保留为长度1。 若是axis没有条目,则缩小全部维度,并返回具备单个元素的张量。
参数:

input_tensor:要减小的张量。应该有数字类型。

axis:要减少的尺寸。若是为None(默认),则缩小全部尺寸。必须在范围[-rank(input_tensor), rank(input_tensor))内。

keep_dims:若是为true,则保留长度为1的缩小尺寸。

name:操做的名称(可选)。

reduction_indices:axis的废弃的名称。
返回:
该函数返回减小的张量。 numpy兼容性 至关于np.sum

 

对比这两个矩阵或者向量的相等的元素

tf.equal(A, B)

若是是相等的那就返回True,反正返回False,返回的值的矩阵维度和A是同样的

例如:
A = [[1,3,4,5,6]]
B = [[1,3,4,3,2]]
with tf.Session() as sess:
    print(sess.run(tf.equal(A, B)))
[[ True  True  True False False]]
该函数将返回一个 bool 类型的张量。

 

获取具备这些参数的现有变量或建立一个新变量。 

get_variable( name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True, use_resource=None, custom_getter=None )

参数:

  • name:新变量或现有变量的名称。
  • shape:新变量或现有变量的形状。
  • dtype:新变量或现有变量的类型(默认为      DT_FLOAT)。
  • initializer:建立变量的初始化器。
  • regularizer:一个函数(张量 - >张量或无);将其应用于新建立的变量的结果将被添加到集合 tf.GraphKeys.REGULARIZATION_LOSSES 中,并可用于正则化。
  • trainable:若是为 True,还将变量添加到图形集合:GraphKeys.TRAINABLE_VARIABLES。
  • collections:要将变量添加到其中的图形集合键的列表。默认为 [GraphKeys.LOCAL_VARIABLES]。
  • caching_device:可选的设备字符串或函数,描述变量应该被缓存以读取的位置。默认为变量的设备,若是不是 None,则在其余设备上进行缓存。典型的用法的在使用该变量的操做所在的设备上进行缓存,经过 Switch 和其余条件语句来复制重复数据删除。 
  • partitioner:(可选)可调用性,它接受要建立的变量的彻底定义的 TensorShape 和 dtype,而且返回每一个坐标轴的分区列表(当前只能对一个坐标轴进行分区)。
  • validate_shape:若是为假,则容许使用未知形状的值初始化变量。若是为真,则默认状况下,initial_value 的形状必须是已知的。
  • use_resource:若是为假,则建立一个常规变量。若是为真,则建立一个实验性的 ResourceVariable,而不是具备明肯定义的语义。默认为假(稍后将更改成真)。
  • custom_getter:可调用的,将第一个参数做为真正的 getter,并容许覆盖内部的      get_variable 方法。custom_getter      的签名应该符合这种方法,但最经得起将来考验的版本将容许更改:def custom_getter(getter, *args, **kwargs)。还容许直接访问全部 get_variable 参数:def      custom_getter(getter, name, *args, **kwargs)。建立具备修改的名称的变量的简单标识自定义 getter 是:python def      custom_getter(getter, name, *args, **kwargs): return getter(name +      '_suffix', *args, **kwargs) 

返回值:建立或存在Variable(或者PartitionedVariable,若是使用分区器)。

可能引起的异常:

  • ValueError:当建立新的变量和形状时,在变量建立时违反重用,或当 initializer 的 dtype 和 dtype 不匹配时。在      variable_scope 中设置重用。

 

 

 

 

tf.truncated_normal_initializer函数

生成截断正态分布的初始化程序。

tf.truncated_normal_initializer方法

__init__(

    mean=0.0,

    stddev=1.0,

    seed=None,

    dtype=tf.float32

)

__call__(

    shape,

    dtype=None,

    partition_info=None

)

from_config(

    cls,

    config

)

函数参数:

  • mean:一个 python 标量或一个标量张量,要生成的随机值的均值。
  • stddev:一个 python 标量或一个标量张量,要生成的随机值的标准误差。
  • seed:一个 Python 整数,用于建立随机种子。查看tf.set_random_seed行为。
  • dtype:数据类型,仅支持浮点类型。

 

LRN函数相似DROPOUT和数据加强做为relu激励以后防止数据过拟合而提出的一种处理方法,全称是 local response normalization--局部响应标准化

tf.nn.lrn

def lrn(input, depth_radius=None, bias=None, alpha=None, beta=None,name=None):

 

tf.nn.bias_add()

 一个叫bias的向量加到一个叫value的矩阵上,是向量与矩阵的每一行进行相加,获得的结果和value矩阵大小相同。

相关文章
相关标签/搜索