tensorflow 函数解释

images = tf.image.random_flip_up_down(images)
这个函数是对图片操作,构造镜面反转的图像
images = tf.image.random_brightness(images, max_delta=0.3)
构造不同亮度的图像
images = tf.image.random_contrast(images, 0.8, 1.2)
构造不同对比度的图像
images_tensor = tf.convert_to_tensor(self.image_names,
dtype=tf.string)

将目标类型转换为tensor类型
input_queue = tf.train.slice_input_producer(
[images_tensor, labels_tensor],num_epochs=num_epochs)

将目标属性组合做slice处理

images_content = tf.read_file(input_queue[0])
从路径中读取文件
images = tf.image.convert_image_dtype(
tf.image.decode_png(images_content, channels=1),
tf.float32)

将读取到的文件转为图片格式

new_size = tf.constant([FLAGS.image_size, FLAG.image_size], dtype=tf.int32)
tf生成常量
images = tf.image.resize_images(images, newsize)
将目标图像变为新的尺寸

模型定义使用的是TF-Slim
TF-Slim是tensorflow中定义、训练和评估复杂模型的轻量级库。tf-slim中的组件可以轻易地和原生tensorflow框架以及例如tf.contrib.learn这样的框架进行整合。
为了简化代码的变量创建,TF-Slim在variables.py中提供了一批轻量级的函数封装,从而是调用者可以更加容易地定义变量。
网络结构为:

network: conv2d->max_pool2d->conv2d->max_pool2d->conv2d->max_pool2d->conv2d->conv2d->max_pool2d->fully_connected->fully_connected

image_batch, label_batch = tf.train.shuffle_batch([images, labels], batche_size = batch_size, capcity = 50000, min_after_dequeue = 10000)
capacity是队列的长度
min_after_dequeue是出队后,队列至少剩下min_after_dequeue个数据此函数的对象是一个乱序的队列,进队的正是传入的tensors 。作用是按照capacity的长度生成一条队列,取其中bach_size大小的数据,即出队。然后入队补充出队数量的数据,继续取出数据。

作用:把数据放在队列里有很多好处,可以完成训练数据和测试数据的解耦,同时有利于写成分布式训练

conv3_1 = slim.conv2d(images, 64, [3, 3], 1,
padding='SAME',
scope='conv3_1')

tf.contrib.slim.conv2d (inputs,
num_outputs,[卷积核个数]
kernel_size,[卷积核的高度,卷积核的宽度]
stride=1,
padding=’SAME’,
)
padding是string类型的变量,只能是”SAME”,”VALID”其中之一,这个值决定了不同的卷积方式,SAME代表卷积核可以停留图像边缘,VALID表示不能。

max_pool_1 = slim.max_pool2d(conv3_1, [2, 2], [2, 2], padding='SAME', scope='pool1')
最大值池化的方法

flatten = slim.flatten(max_pool_4)
转换为需要的shape

loss = tf.reduce_mean(
tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels))

这个函数和tf.nn.softmax_cross_entropy_with_logits函数比较明显的区别在于它的参数labels的不同,这里的参数label是非稀疏表示的,比如表示一个3分类的一个样本的标签,稀疏表示的形式为[0,0,1]这个表示这个样本为第3个分类,而非稀疏表示就表示为2(因为从0开始算,0,1,2,就能表示三类)

cast(x, dtype, name=None)
转换格式

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
以列表的形式获取集合UPDATE_OPS中的值,每一个值都作为列表中的一个元素

train_op = slim.learning.create_train_op(loss, optimizer, global_step=global_step)
执行优化函数,对损失进行优化

tf.summary.scalar('loss', loss)
tesorboard统计函数

# 设置多线程协调器
coord = tf.train.Coordinator()
threads=tf.train.start_queue_runners(sess=sess, coord=coord)

Coordinator类用来管理在Session中的多个线程,可以用来同时停止多个工作线程并且向那个在等待所有工作线程终止的程序报告异常,该线程捕获到这个异常之后就会终止所有线程。

你可能感兴趣的:(tensorflow)