TensorFlow1.12.0
TensorFlow 的数据读取机制
一、TensorFlow基础
1.使用多线程并行化
tf.data模块运行时,使用多线程进行数据通道处理,从而实现并行,这种操作几乎是透明的。我们只需要添加一个num_parallel_calls参数到每一个dataset.map()call中,
num_threads = 4
dataset = dataset.map(parse_function, num_parallel_calls=num_threads)
如果使用值tf.data.experimental.AUTOTUNE,则根据可用的CPU动态设置并行调用的数量。
num_parallel_calls 参数的最优值取决于你的硬件,训练数据的特点(比如:它的 size、shape),map 函数的计算量 和 CPU 上同时进行的其它处理。一个简单的原则是:将 num_parallel_calls 设置为 CPU 的核心数。例如,如果 CPU 有四个核,将 num_parallel_calls 设置为 4 将会很高效。另一方面,设置 num_parallel_calls 大于 CPU 的核心数,能够导致低效的调度,导致输入管道速度下降。
2.图片格式
image = tf.image.decode_jpeg(image_file) # 如果是png格式的图片,使用tf.image.decode_png()
3.tensorflow中tf.one_hot()函数的作用
是将一个值化为一个概率分布的向量,一般用于分类问题。
具体用法以及作用见以下代码:
import numpy as np
import tensorflow as tf
SIZE=6
CLASS=8
label1=tf.constant([0,1,2,3,4,5,6,7])
sess1=tf.Session()
print('label1:',sess1.run(label1))
b = tf.one_hot(label1,CLASS,1,0)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(b)
print('after one_hot',sess.run(b))
输出:
label1: [0 1 2 3 4 5 6 7]
after one_hot:
[[1 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0]
[0 0 0 1 0 0 0 0]
[0 0 0 0 1 0 0 0]
[0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 1 0]
[0 0 0 0 0 0 0 1]]
二、TensorFlow报错
1. ImportError: cannot import name 'Iterator'
尝试:
import tensorflow as tf
Iterator = tf.data.Iterator
2. tensorflow/core/framework/allocator.cc:122] Allocation of 1247616000 exceeds 10% of system memory.
batch_size过大,调小设定的 batch_size 即可
Batch_size参数的作用:决定了下降的方向
总结:对于新手而言,在GPU内存足够的情况下,结合样本大小,可以尝试batch_size为8,16,32,64等.
参考文献:
1.TensorFlow学习(一)——常用方法
2.https://www.jianshu.com/nb/34356339
3.第一个TensorFlow程序(hello world)详解
网友评论