tf.session.run()单函数运行和多函数运行区别
tf.session.run()单函数运行和多函数运行区别
觉得有用的话,欢迎一起讨论相互学习~




problem introduction
sess.run([a,b]) # (1)同时运行a,b两个函数
sess.run(a)
sess.run(b) # (2)运行完a函数后再运行b函数
- 这两个语句初看时没有任何区别,但是如果a,b函数恰好是读取example_batch和label_batch这种需要使用到 数据批次输入输出函数时 例如(tf.train.shuffle_batch.tf.reader.read).
- (1)式只会调用一次输入数据函数,则得到的example_batch和label_batch来自同一批次。 (2)式会单独调用两次输入数据函数,则得到的example_batch来自上一批次而label_batch来自下一批次。
- 这个需要十分注意,因为如果我们想要实时打印出label_batch和inference(example_batch)时,即将输入数据的标签和经过模型预测推断的结果进行比较时.如果我们使用(2)中的写法,则label_batch和inference(example_batch)并不是来自与同一批次数据。
example code
这里我们分别使用两种不同的代码,读取csv文件中的数据。我们观察这两种方式读取的数据有什么不同。
源程序文件下载
test_tf_train_batch.csv
import tensorflow as tf
BATCH_SIZE = 400
NUM_THREADS = 2
MAX_NUM = 5
def read_data(file_queue):
reader = tf.TextLineReader(skip_header_lines=1)
key, value = reader.read(file_queue)
defaults = [[0], [0.], [0.]]
NUM, C, Tensile = tf.decode_csv(value, defaults)
vertor_example = tf.stack([C])
vertor_label = tf.stack([Tensile])
vertor_num = tf.stack([NUM])
return vertor_example, vertor_label, vertor_num
def create_pipeline(filename, batch_size, num_threads):
file_queue = tf.train.string_input_producer([filename]) # 设置文件名队列
example, label, no = read_data(file_queue) # 读取数据和标签
example_batch, label_batch, no_batch = tf.train.batch(
[example, label, no], batch_size=batch_size, num_threads=num_threads, capacity=MAX_NUM)
return example_batch, label_batch, no_batch
x_train_batch, y_train_batch, no_train_batch = create_pipeline('test_tf_train_batch.csv', batch_size=BATCH_SIZE,
num_threads=NUM_THREADS)
init_op = tf.global_variables_initializer()
local_init_op = tf.local_variables_initializer()
with tf.Session() as sess:
sess.run(local_init_op)
sess.run(init_op)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
# 同时运行的方式
example, label, num = sess.run([x_train_batch, y_train_batch, no_train_batch])
print('The first mode to load data')
print('example', example)
print('label', label)
print('num', num)
# 分别运行的方式
# example = sess.run(x_train_batch)
# label = sess.run(y_train_batch)
# num = sess.run(no_train_batch)
# print('The second mode to load data')
# print('example', example)
# print('label', label)
# print('num', num)
coord.request_stop()
coord.join(threads)
Result
Run at the same time
example, label, num = sess.run([x_train_batch, y_train_batch, no_train_batch])
print('The first mode to load data')
print('example', example)
print('label', label)
print('num', num)
| example | label | num |
|---|---|---|
| [ 0.294 ] | [ 0.59821427] | [1] |
| [ 0.31 ] | [ 0.51785713] | [2] |
| [ 0.2 ] | [ 0.79464287] | [3] |
| [ 0.30000001] | [ 0.4732143 ] | [4] |
| [ 0.36000001] | [ 0.6964286 ] | [5] |
Run respectively
example = sess.run(x_train_batch)
label = sess.run(y_train_batch)
num = sess.run(no_train_batch)
print('The second mode to load data')
print('example\n', example)
print('label\n', label)
print('num\n', num)
经过对比原始数据,我们发现采用单独运行的方式读取的example来自第一个batch,label来自下一个batch,而num来自第三个batch.也就是说其实我们单独运行了三次文件输入的程序。虽然是个小事,但是有些方面不注意,我们会酿成大错
| example | label | num |
|---|---|---|
| [ 0.294 ] | [ 0.5625 ] | [11] |
| [ 0.31 ] | [ 0.3482143 ] | [13] |
| [ 0.2 ] | [ 0.5535714 ] | [12] |
| [ 0.30000001] | [ 0.5714286 ] | [14] |
| [ 0.36000001] | [ 0.48214287] | [15] |
- 原始数据
| C | tensile | NUM |
|---|---|---|
| 0.294 | 0.598214286 | 1 |
| 0.31 | 0.517857143 | 2 |
| 0.2 | 0.794642857 | 3 |
| 0.3 | 0.473214286 | 4 |
| 0.36 | 0.696428571 | 5 |
| 0.28 | 0.5625 | 6 |
| 0.2 | 0.348214286 | 7 |
| 0.284 | 0.553571429 | 8 |
| 0.38 | 0.482142857 | 9 |
| 0.44 | 0.571428571 | 10 |
| 0.214 | 0.660714286 | 11 |
| 0.72 | 0.589285714 | 12 |
| 0.38 | 0.616071429 | 13 |
| 0.266 | 0.5 | 14 |
| 0.46 | 0.642857143 | 15 |
tf.session.run()单函数运行和多函数运行区别的更多相关文章
- Tensorflow中的图(tf.Graph)和会话(tf.Session)详解
Tensorflow中的图(tf.Graph)和会话(tf.Session) Tensorflow编程系统 Tensorflow工具或者说深度学习本身就是一个连贯紧密的系统.一般的系统是一个自治独立的 ...
- 【Tensorflow】(tf.Graph)和(tf.session)
图(tf.Graph):计算图,主要用于构建网络,本身不进行任何实际的计算. 会话(tf.session):会话,主要用于执行网络.所有关于神经网络的计算都在这里进行,它执行的依据是计算图或者计算图的 ...
- tf.Session()函数的参数应用(tensorflow中使用tf.ConfigProto()配置Session运行参数&&GPU设备指定)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/dcrmg/article/details ...
- tensorflow函数解析:Session.run和Tensor.eval的区别
tensorflow函数解析:Session.run和Tensor.eval 翻译 2017年04月20日 15:05:50 标签: tensorflow / 机器学习 / 深度学习 / python ...
- 【转载】 TensorFlow函数:tf.Session()和tf.Session().as_default()的区别
原文地址: https://blog.csdn.net/Enchanted_ZhouH/article/details/77571939 ------------------------------- ...
- tf.app.run() 运行结束时,报错:SystemExit exception: no description
环境:Python3.6.6 + tensorflow-gpu 源码如下: import tensorflow as tf def main(): print("hello tf.app.r ...
- tensorflow函数解析:Session.run和Tensor.eval
原问题链接: http://stackoverflow.com/questions/33610685/in-tensorflow-what-is-the-difference-between-sess ...
- tensorflow函数解析: tf.Session() 和tf.InteractiveSession()
链接如下: http://stackoverflow.com/questions/41791469/difference-between-tf-session-and-tf-interactivese ...
- tf.Session()和tf.InteractiveSession()的区别
官方tutorial是这么说的: The only difference with a regular Session is that an InteractiveSession installs i ...
随机推荐
- PS1修改xshell命令行样式
linux 其他知识目录 在/root/.bashrc下加入如下代码. export PS1='\n\e[1;37m[\e[m\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\H ...
- 各团队对《t铁大导航》评价及我组回复
组名 对我们组的建议 我组回复 (1)跑男 你们的导航前期要做到什么样的程度呢?其实我一直是很期待你们完成时我能够用你们的导航来感受一下咱们铁大校园风情.你们用了数据结构算法来找最短路径,那你们能不能 ...
- Firefox必备的24款web开发插件
from: 软件过滤: 排序:收录时间 | 浏览数 网页开发FireFox插件 Firebug Firebug是Firefox下的一款开发类插件,现属于Firefox的 五星级强力推荐插件之一.它集H ...
- SQL 语句(增删改查)
一.增:有4种方法1.使用insert插入单行数据: --语法:insert [into] <表名> [列名] values <列值> 例:insert into Strden ...
- DELL服务器PXE前期处理
thaks:https://www.cnblogs.com/520ZXL/ PXE批量推系统,服务器要具备条件:raid处理好,设置为pxe启动,与PXE服务器网络要通 先进入磁盘阵列(ctrl+R) ...
- 上传web端——个人项目
我用visual studio新建了一个web窗口,如图: 然后这里是系统自带的代码: [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile ...
- 【Leetcode】179. Largest Number
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- Binlog的三种模式
binlog模式分三种(row,statement,mixed) 1.Row 日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改,只记录要修改的数据,只有value,不会有 ...
- POJ2823_Sliding Window
以前也碰到过这种类型的题目,以前好像做出来过,但是忘记了,这次又坑了. 题目很简单,对于从前到后每一个连续的长度为k的数字,求出这段数字中的最大的数字和最小的数字. 一开始我用离散化+树状数组来更新和 ...
- hdu 6435 CSGO(最大曼哈顿距离)
题目链接 Problem Description You are playing CSGO. There are n Main Weapons and m Secondary Weapons in C ...