Tensorflow专题6:CNN函数整理

tf.nn.conv2d()

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)
参数:

  • input : 输入的要做卷积的图片,要求为一个张量,shape为 [ batch, in_height, in_weight, in_channel ],其中batch为图片的数量,in_height 为图片高度,in_weight 为图片宽度,in_channel 为图片的通道数,灰度图该值为1,彩色图为3。(也可以用其它值,但是具体含义不是很理解)
  • filter: 卷积核,要求也是一个张量,shape为 [ filter_height, filter_weight, in_channel, out_channels ],其中 filter_height 为卷积核高度,filter_weight 为卷积核宽度,in_channel 是图像通道数 ,和 input 的 in_channel 要保持一致,out_channel 是卷积核数量。
  • strides: 卷积时在图像每一维的步长,这是一个一维的向量,[ 1, strides, strides, 1],第一位和最后一位固定必须是1
  • padding: string类型,值为“SAME” 和 “VALID”,表示的是卷积的形式,是否考虑边界。”SAME”是考虑边界,不足的时候用0去填充周围,所得大小与卷积之前相同;”VALID”不考虑边界
  • use_cudnn_on_gpu: bool类型,是否使用cudnn加速,默认为true

举例:
tf.nn.conv2d(x, W, strides=[1,1,1,1], padding=”SAME”)

tf.control_dependencies()

是一种流程控制函数,比如:

1
2
3
4
with tf.control_dependencies([a, b, c]):
# `d` and `e` will only run after `a`, `b`, and `c` have executed.
d = ...
e = ...

只有[a,b,c]都被执行了才会执行d和e操作,这样就实现了流的控制。

tf.identity()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 例1:x,y都是variable,y不会参与到x的流程计算中
x = tf.Variable(0.0)
print(x)
#返回一个op,表示给变量x加1的操作
x_plus_1 = tf.assign_add(x, 1)

with tf.control_dependencies([x_plus_1]):
y = x
print(y)

with tf.Session() as sess:
tf.global_variables_initializer().run()
for i in range(5):
print(y.eval())


0.0
0.0
0.0
0.0
0.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#例2:y变成op Tensor,可以参与流程
x = tf.Variable(0.0)
print(x)
#返回一个op,表示给变量x加1的操作
x_plus_1 = tf.assign_add(x, 1)

with tf.control_dependencies([x_plus_1]):
y = tf.identity(x) #或者写成 y = x + 0.0,把y变成op
print(y)

with tf.Session() as sess:
tf.global_variables_initializer().run()
for i in range(5):
print(y.eval())


Tensor(“Identity_3:0”, shape=(), dtype=float32, device=/device:CPU:0)
1.0
2.0
3.0
4.0
5.0

总结:tf.identity()可以让简单赋值y = x中的y变成和x相同size的op,只需y = tf.identity(x),便可和x一样参数等价的流程运算;也可以对自己使用x = tf.identity(x)直接把自己升级成op

tf.train.shuffle_batch()

1、函数定义
tf.train.shuffle_batch(tensor_list, batch_size, capacity, min_after_dequeue, num_threads=1, seed=None, enqueue_many=False, shapes=None,name=None)

2、参数说明:
capacity:队列的长度
min_after_dequeue:出队后,队列至少剩下min_after_dequeue个数据

3、例子:

1
2
3
4
5
6
7
# Creates batches of 32 images and 32 labels.
image_batch, label_batch = tf.train.shuffle_batch(
[single_image, single_label],
batch_size=32,
num_threads=4,
capacity=50000,
min_after_dequeue=10000)

꧁༺The༒End༻꧂