小白的深度学习之路——tensorflow常用函数

这里整理一下tensorflow变成过程中遇到的一些常见的函数,会不会不知道,用就完了。/(ㄒoㄒ)/~~

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

这个函数主要使用在filter的卷积操作。

input:输入tensor(不知道tensor是啥的请看我的另一篇文章,tensorflow初识。--有可能现在还是一片草稿),这个tensor要有固定shape[batch, in_height, in_width, in_channels],分别对应训练时一个batch的图像数量,图像高度,图像宽度,和图像的通道数。

filter:卷积核的tensor,同样要有固定的shape[filter_height, filter_width, in_channels, out_channels],具体和input的差不多,特殊说明一下,其中的in_channels与input的in_channels要对应,通道数是一样的。

strides:步长,不做解释,不懂得自行度娘卷积运算。这是一个一维的向量。

padding:只能从“SAME”和“VAILD”中选择,前者表示卷积核可以停留在图像边缘,若卷积核大小定为3*3,input为5*5即第一次乘卷积核的中心对应的是input的1,1,其他卷积核露出来的地方一般是0补全,卷积之后的大小是5×*5,后者表示不可以停留在图像边缘,即第一次乘的时候,卷积核的中心对应的是input的3,3,卷积之后的大小是3*3,会降维。

use_cudnn_on_gpu:是否使用GPU加速,一般是TRUE

返回值是一个tensor,格式为[batch, height, weight, channel]

具体详见:https://www.cnblogs.com/qggg/p/6832342.html(这里表示感谢,O(∩_∩)O蟹蟹)

 

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

这个函数执行最大池化功能。

value:需要池化的输入,一般是feature map, 依然需要[batch, height, weight, channels]这样的shape

ksize:池化窗口的大小,取一个四维的向量,一般是[1, height, weight, 1],因为我们不想在batch,和channel上做池化,所以一般这两个参数设置为1.

stride:步长,一般设置为[1, stride, stride, 1]原因同ksize。

padding:和卷积类似,取“SAME”或者“VALID”

返回值是一个tensor,依旧是[batch, height, weight, channel]的格式

 

3.tf.split(value, num_or_size_splits, axis=0, nume=None, name='spilt')

这个函数执行将一个tensor划分为几个子tensor

value:需要被划分的tensor。

num_or_size_spilts:可以有两种形式。第一种:整形,就直接在axis=D的维度上把tensor平均分成int份。第二种,传递的是一个向量,但是这个向量的内和,要与原始的tensor的维度上的数值相等。那么就根据这个向量将原有的tensor对应划分。简单点说就是前者是平均的划分,后者是不平均的划分。

axis:准备在第几个维度上进行切割。

# 张量为(5, 30)
# 这个时候5是axis=0, 30是axis=1,如果要在axis=1这个维度上把这个张量拆分成三个子张量
#传入向量时
split0, split1, split2 = tf.split(value, [4, 15, 11], 1)
tf.shape(split0)  # [5, 4]
tf.shape(split1)  # [5, 15]
tf.shape(split2)  # [5, 11]
# 传入整数时
split0, split1, split2 = tf.split(value, num_or_size_splits=3, axis=1)
tf.shape(split0)  # [5, 10]

具体详见:https://blog.csdn.net/mls0311/article/details/82052472(这里表示感谢,O(∩_∩)O蟹蟹)

4.tf.concat(values, concat_dim, name='concat')

这个函数主要实现tensor的拼接。

values:是一个列表,列表里是需要连接的矩阵或者数组。

concat_dim:表示你所要连接的维度。

  t1 = [[1, 2, 3], [4, 5, 6]]
  t2 = [[7, 8, 9], [10, 11, 12]]
  tf.concat([t1, t2], 0)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
  tf.concat([t1, t2], 1)  # [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]
 
  # tensor t3 with shape [2, 3]
  # tensor t4 with shape [2, 3]
  tf.shape(tf.concat([t3, t4], 0))  # [4, 3]
  tf.shape(tf.concat([t3, t4], 1))  # [2, 6]

以上代码举例说明了在第0维度和在第1维度分别进行拼接。

5.tf.resahpe(tensor, shape, name='None')

函数的作用是将tensor转换为shape的格式。

tensor:代转换的tensor。

shape:转换之后的shape。特殊说明的是,其中的-1参数,在shape中有且只能有一个,代表那一维度不用我们指定大小,系统会自动计算。

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

函数的作用是执行dropout操作。       

dropout函数会以一个概率为keep_prob来决定神经元是否被抑制。如果被抑制,该神经元输出为0,如果不被抑制则该神经元的输出为输入的1/keep_probbe倍

x:输入

keep_prob:设置神经元被选中的概率,在初始化时该参数是一个占位符,keep_prob=tf.palceholder(tf.float32)。在run时设置keep_prob的值,例如keep_prob=0.5

noise_shape:一个int32的一维tensor,表示随机保留丢弃的形状。可以不指定,表示每个元素独立安排保留或者丢弃。若设定,x的形状必须是可以广播的。当noise_shape[i] == shape(x)[i],x中的元素是相互独立的。如果shape(x)=[k,l,m,n](k表示数据的个数,l表示数据的行数,m表示数据的列,n表示通道),当noise_shape=[k,1,1,n],表示数据的个数与通道是相互独立的,但是与数据的行和列是有关联的,即要么都为0,要么都为输入的1/keep_prob倍。

下面举个栗子:

import tensorflow as tf
dropout = tf.placeholder(tf.float32)
x = tf.Variable(tf.ones([10, 10]))
y = tf.nn.dropout(x, dropout)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
a = sess.run(y, feed_dict = {dropout: 0.5})
print(a)
 
结果:
[[0. 2. 0. 2. 2. 2. 0. 2. 2. 2.]
 [2. 0. 0. 0. 2. 2. 0. 2. 0. 2.]
 [0. 0. 2. 2. 2. 0. 2. 2. 2. 2.]
 [0. 0. 2. 2. 0. 0. 2. 2. 0. 2.]
 [0. 2. 0. 0. 2. 0. 0. 0. 0. 0.]
 [2. 0. 0. 0. 0. 2. 0. 0. 0. 0.]
 [0. 2. 0. 0. 2. 2. 2. 0. 2. 0.]
 [0. 2. 2. 2. 0. 0. 0. 2. 0. 2.]
 [0. 0. 2. 0. 2. 2. 0. 2. 0. 0.]
 [0. 2. 2. 2. 2. 0. 2. 0. 2. 2.]]
 
Process finished with exit code 0

7.convert_to_tensor(values, dtype, name=None, preferred_dtype=None)

此函数实现将python对象转化为Tensor对象。他接受Numpy数组,python列表,和python标量。

value:待转化的对象

dtype:返回的Tensor可选元素类型,若改值为空,,则将从值的类型中判断。

name:创建的新Tensor使用的名称。

preferred_dtype:返回Tensor的可选元素类型。在某些情况下,调用方在转换为张量时可能没有 dtype,因此 preferred_dtype 可以作为软首选项使用。如果转换为 preferred_dtype 是不可行的,则此参数无效。

注意:

  • TypeError:如果没有为值注册转换函数。
  • RuntimeError:如果注册的转换函数返回无效值

举个栗子:

import numpy as np

def my_func(arg):
  arg = tf.convert_to_tensor(arg, dtype=tf.float32)
  return tf.matmul(arg, arg) + arg

# The following calls are equivalent.
value_1 = my_func(tf.constant([[1.0, 2.0], [3.0, 4.0]]))
value_2 = my_func([[1.0, 2.0], [3.0, 4.0]])
value_3 = my_func(np.array([[1.0, 2.0], [3.0, 4.0]], dtype=np.float32))

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值