tensorflow中常见方法详解

    tensorflow是深度学习领域最受欢迎的框架之一,其内部高度集成的方法为编写深度神经网路算法提供了极大的便利,然而在使用该框架时,必须对内部的方法有一定了解,否则完成一个深度学习的应用还是有一定难度的。本文旨在对tensorflow框架中常见的方法进行简单介绍,希望对新接触tensorflow的小伙伴有一定帮助。

一.tensorflow中生成向量

1.ones(shape, dtype=tf.float32, name=None)
    Creates a tensor with all elements set to 1.  按照shape生成一个dtype类型的全1张量

  例子:  tf.ones([2, 3], tf.int32)  # [[1, 1, 1], [1, 1, 1]]

这个方法跟numpy模块中的 ones(shape, dtype=None, order='C')很相似
2.zeros(shape, dtype=tf.float32, name=None)
    Creates a tensor with all elements set to zero.按照shape生成一个dtype类型的全0张量

例子:  tf.zeros([2, 3], tf.int32)  # [[0, 0, 0], [0, 0, 0]]

上述两种方法只能生成全0和全1的张量,tensorflow中同样提供了可以生成任意元素的张量

3.fill(dims, value, name=None)
    Creates a tensor filled with a scalar value.按照dims,(同上述方法的shape)生成一个全value张量

例子:fill([2, 3], 9) ==> [[9, 9, 9],[9, 9, 9]]

4.constant(value, dtype=None, shape=None, name='Const', verify_shape=False)
    Creates a constant tensor.创建一个常量tensor,按照给出value来赋值,可以用shape来指定其形状。value可以是一个数,也可以是一个list。 如果是一个数,那么这个常量中所有值的按该数来赋值。 如果是list,那么len(value)一定要小于等于shape展开后的长度。赋值时,先将value中的值逐个存入。不够的部分,则全部存入value的最后一个值

例子:a = tf.constant(3,shape=[2])
b = tf.constant(
3,shape=[2,2])c = tf.constant([1,2,3],shape=[5])
d = tf.constant([
1,2,3],shape=[3,2])

sess = tf.Session()
print(sess.run(a))
#[
3 3]
print(sess.run(b))
#
[[3 3]
# [3 3]]

print(sess.run(c))
#[
1 2 3 3 3]
print(sess.run(d))
#
[[1 2]
# [3 3]
# [3 3]]

5.tf.random_normal|tf.truncated_normal|tf.random_uniformrandom_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)random_uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name=None)这几个都是用于生成随机数tensor的。 
random_normal: 正态分布随机数,均值mean,标准差stddev
truncated_normal:截断正态分布随机数,均值mean,标准差stddev,只保留[mean-2*stddev,mean+2*stddev]范围内的随机数
 random_uniform:均匀分布随机数,范围为[minval,maxval]
二. 矩阵变换
1.reshape(tensor, shape, name=None)
Given `tensor`, this operation returns a tensor that has the same values
例子:
(1) t1= [1, 2, 3, 4, 5, 6, 7, 8, 9] 
    reshape(t1, [3, 3]) ==> [[1, 2, 3],
                                        [4, 5, 6],    
                                        [7, 8, 9]]
(2)
t2=[[[1, 1], [2, 2]],
    [[3, 3], [4, 4]]]
    reshape(t2, [2, 4]) ==> [[1, 1, 2, 2],
                            [3, 3, 4, 4]]
(3)在reshape函数中,-1使用很灵活,可以用来推断形状
以t3为例    
t3=[[[1, 1, 1],
         [2, 2, 2]],
         [[3, 3, 3],
         [4, 4, 4]],
         [[5, 5, 5],
     [6, 6, 6]]]容易看到t3.shape=(3,2,3) 1)shape参数只给定一个-1,这时会把tensor转化为一维张量

reshape(t3, [-1]) ==> [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6]2)shape参数其中一个位置定为-1,那么reshape方法会自动根据原tensor的shape进行转换 reshape(t, [2, -1]) ==> [[1, 1, 1, 2, 2, 2, 3, 3, 3],
                           [4, 4, 4, 5, 5, 5, 6, 6, 6]]reshape(t, [3, -1]) ==> [[1, 1, 1, 2, 2, 2], [3, 3, 3, 4, 4, 4],

                         [5, 5, 5, 6, 6, 6]]

.卷积神经网络中的相关方法

1.placeholder(dtype,shape=None, name=None)

此函数可以理解为形参,用于定义过程,在执行时再赋具体的值

2.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)

计算两个张量乘积,也就是矩阵相乘

3.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True,

         data_format='NHWC',dilations=[1, 1, 1, 1], name=None)

参数:

input:卷积的输入图像,是一个4维的tensorshape[batch,in_height,in_width,in_channels]

具体含义[batch_size,图片高度,宽度,通道数],对于灰度图片来讲,通道数维1

filter:CNN的卷积核,也就是卷积核的共享权值,4tensor[fil_height,fil_width,in_channels,out_channels]

具体含义:[卷积核高度,宽度,图像通道数,卷积核个数],卷积核个数对应feature的个数

strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4

padding:string类型的量,只能是"SAME","VALID"其中之一

use_cudnn_on_gpu:默认使用gpu加速

 

max_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

参数:

value:需要池化的输入(也就是卷积之后的到的feature map),格式[batch, height, width, channels]

ksize:池化窗口的大小,一般为[1,height,width,1],因为不希望在batchchannel上做池化,因此定为1

strides:窗口在每个维度上滑动的步长,一般为[1,stride,stride,1]

 

tf.nn.dropouttensorflow里面为了防止过拟合而使用的函数,它一般用在全连接层。
Dropout
就是在不同的训练过程中随机扔掉部分神经元。也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。
tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None,name=None)
第一个参数x:指输入
第二个参数keep_prob: 设置神经元被选中的概率,在初始化时keep_prob是一个占位符,
 keep_prob = tf.placeholder(tf.float32) 

tensorflow
run时设置keep_prob具体的值,例如keep_prob: 0.5

 

 







你可能感兴趣的:(tensorflo,深度学)