文章目录
tensorflow计算流程
定义计算图(包括变量和占位符表示的数据),使用会话执行定义好的运算图,会话用run()函数传入最终被计算的节点,tensorflow会自动计算剩下所依赖的节点(每一个节点代表一个操作,属性用张量来表示),使用完会话后,需要关闭会话,避免造成资源泄露。
一、加载数据
Tensorflow 数据读取有三种方式:
- Preloaded data: 预加载数据
- Feeding: 用占位符表示数据,启动session时再把数据喂给后端
- Reading from file: 从文件中直接读取
优缺点
1、预加载:将数据直接内嵌到Graph中,再把Graph传入Session中运行。当数据量比较大时,Graph的传输会遇到效率问题。
2、用占位符替代数据,待运行的时候填充数据。
3、前两种方法很方便,但是遇到大型数据的时候就会很吃力,即使是Feeding,中间环节的增加也是不小的开销,比如数据类型转换等等。最优的方案就是在Graph定义好文件读取的方法,让TF自己去从文件中读取数据,并解码成可使用的样本集。
1、从文件中直接读取
1先创建文件队列
filename_queue = tf.train.string_input_producer(filenames)
2再创建内存队列
threads = tf.train.start_queue_runners(sess=sess)
文件队列,通过tf.train.string_input_producer()函数来创建,文件名队列不包含文件的具体内容,只是在队列中记录所有的文件名,所以可以在这个函数中对文件设置多个epoch,并对其进行shuffle。这个函数只是创建一个文件队列,并指定入队的操作由几个线程同时完成。真正的读取文件名内容是从执行了tf.train.start_queue_runners()开始的,start_queue_runners返回一个op,一旦执行这个op,文件名队列就开始被填充了
2、先产生数据,再把数据喂给后端
流程:打开一个session --> 喂数据 --> 计算y (先定义图,数据用占位符表示,数据在调用session时