当前位置:   article > 正文

tensorflow的一些函数:conv2d、max_pool、relu、flatten、fully_connected等_conv2d relu

conv2d relu

1.   tf.nn.conv2d

  1. def conv2d(input, # 张量输入
  2. filter, # 卷积核参数
  3. strides, # 步长参数
  4. padding, # 卷积方式
  5. use_cudnn_on_gpu=None, # 是否是gpu加速
  6. data_format=None, # 数据格式,与步长参数配合,决定移动方式
  7. name=None): # 名字,用于tensorboard图形显示时使用

第一个参数input: 输入的图像,需要是一个4D的tensor[batch,height,width,channel],要求类型为float32和float64其中之一

第二个参数filter: 卷积核,要求一个4D的tensor[height, width,in_channel,out_channel]类型与input相同

第三个参数strides:步长,一个一维的向量,长度为4,[1,height,width,1],通常heigh和width都是相同的。表示滑动的步长

第四个参数padding:string的类型,只能是"SAME"和”valid“之一。same是填充padding,输出图片大小跟步长有关。valid是无padding,输出图片大小根据具体的公式计算。

第五个参数use_cudnn_un_gpu:是否使用cudnn加速,默认为true.

例如:步长为1,填充same

tf.nn.conv2d(x,w1,strides=[1,1,1,1],padding="SAME")

 2.  tf.nn.max_pool

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]这种形式

例如:池化窗口8*8  步长8*8  填充same

tf.nn.max_pool(a,ksize=[1,8,8,1],strides=[1,8,8,1],padding="SAME")

3.  tf.relu

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

函数是将大于0的数保持不变,小于0的数置为0,在卷积神经网络中提供非线性。

  1. import tensorflow as tf
  2. a = tf.constant([[-2,-4],[4,-2]])
  3. with tf.Session() as sess:
  4. print(sess.run(tf.nn.relu(a)))
  1. [[0 0]
  2. [4 0]]

4. tf.contrib.layers.flatten

 tf.contrib.layers.flatten(A)

给定一个输入A, 此函数将其每个样本转化为一维的向量,然后返回一个tensor,其维度为(batchsize,k),一般应用在卷积神经网络全连接层前,因为全连接层需要将输入数据变为一个向量。

例如:A是100*7*7*64的矩阵,通过转换后变成100*3136的矩阵。100是batchsize, 3136是7*7*64的乘积

5.  tf.contrib.layers.fully_connected

  1. tf.contrib.layers.fully_connected(
  2. inputs,
  3. num_outputs,
  4. activation_fn=tf.nn.relu,
  5. normalizer_fn=None,
  6. normalizer_params=None,
  7. weights_initializer=initializers.xavier_initializer(),
  8. weights_regularizer=None,
  9. biases_initializer=tf.zeros_initializer(),
  10. biases_regularizer=None,
  11. reuse=None,
  12. variables_collections=None,
  13. outputs_collections=None,
  14. trainable=True,
  15. scope=None
  16. )

给定一个一维化的输入input, 输出个数num_outputs, 默认采用relu激活函数(可以None,不采用激活函数)。tensorflow的全连接层会自动初始化权值(w,b)并在模型训练时一直参与,所以在初始化参数的时候我们不需要去初始化他们。

例如:使用没有非线性激活函数的全连接层,输出为6个神经元

tf.contrib.layers.fully_connected(P,6,activation_fn=None)

6.  tf.equal

tf.equal(a,b,name=None)

a,b维度必须相同,判断a,b是否相等,对a,b中的元素逐个进行判断,如果相等就是true,不相等就是false

  1. import tensorflow as tf
  2. a = [[1,2,3],[4,5,6]]
  3. b = [[1,0,3],[1,5,1]]
  4. with tf.Session() as sess:
  5. print(sess.run(tf.equal(a,b)))
  6. [[ True False True]
  7. [False True False]]

7.  tf.cast

tf.cast(x,dtype,name=None)

函数的作用是执行张量数据类型转换。dtype是目标数据类型。

  1. t1 = tf.Variable([1,2,3,4,5])
  2. t2 = tf.cast(t1,dtype=tf.float32)
  3. [ 1. 2. 3. 4. 5.]

8.  tf.reduce_mean

  1. tf.reduce_mean(input_tensor,
  2. axis=None,
  3. keep_dims=False,
  4. name=None,
  5. reduction_indices=None)

第一个参数input_tensor: 输入的待降维的tensor;

第二个参数axis: 指定的轴,如果不指定,则计算所有元素的均值;

第三个参数keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;

第四个参数name: 操作的名称;

  1. import tensorflow as tf
  2. x = [[1,2,3],
  3. [1,2,3]]
  4. xx = tf.cast(x,tf.float32)
  5. mean_all = tf.reduce_mean(xx, keep_dims=False) #所有元素的平均值
  6. mean_0 = tf.reduce_mean(xx, axis=0, keep_dims=False) #纵轴
  7. mean_1 = tf.reduce_mean(xx, axis=1, keep_dims=False) #横轴
  8. with tf.Session() as sess:
  9. m_a,m_0,m_1 = sess.run([mean_all, mean_0, mean_1])
  10. print m_a # output: 2.0
  11. print m_0 # output: [ 1. 2. 3.]
  12. print m_1 #output: [ 2. 2.]

类似函数还有:

tf.reduce_sum :计算tensor指定轴方向上的所有元素的累加和;

tf.reduce_max  :  计算tensor指定轴方向上的各个元素的最大值;

tf.reduce_all :  计算tensor指定轴方向上的各个元素的逻辑和(and运算);

tf.reduce_any:  计算tensor指定轴方向上的各个元素的逻辑或(or运算);

9.tf.boolean_mask

  1. tf.boolean_mask(
  2. tensor,
  3. mask,
  4. name='boolean_mask',
  5. axis=None
  6. )

 将输入的数组tensor,根据mask掩码, 挑出想要的数据输出.

  1. import tensorflow as tf
  2. a = [1, 2, 3, 4]
  3. mask = [True, False, True, False]
  4. sess = tf.Session()
  5. print(sess.run(tf.boolean_mask(a, mask))) #[1 3]

参考链接

https://blog.csdn.net/LiQingBB/article/details/83449842

https://blog.csdn.net/Sophia_11/article/details/84729102

https://blog.csdn.net/dcrmg/article/details/79797826

https://blog.csdn.net/dcrmg/article/details/79747814

https://blog.csdn.net/ustbbsy/article/details/79564529

https://blog.csdn.net/fyq201749/article/details/82776968

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/75052
推荐阅读
相关标签
  

闽ICP备14008679号