[root@localhost custom-resnet-v2]# cat runme.sh
#python demo_slim.py -h
#python demo_slim.py --cpu_num 8 --inter_op_threads 1 --intra_op_threads 8 --dump_timeline True # export KMP_AFFINITY=verbose,granularity=fine,proclist=[0,1,2,3],explicit
# numactl -C 0-3 python demo_slim.py --cpu_num 4 --inter_op_threads 1 --intra_op_threads 4 >& run1.log & export OMP_NUM_THREADS=8
python demo_slim.py --cpu_num 8 --inter_op_threads 1 --intra_op_threads 8
[root@localhost custom-resnet-v2]# cat demo_slim.py
# coding: utf8
import os
import sys import numpy as np
import tensorflow as tf
from tensorflow.python.client import timeline
import argparse
import time def make_fake_input(batch_size, input_height, input_width, input_channel):
im = np.zeros((input_height,input_width,input_channel), np.uint8)
im[:,:,:] = 1
images = np.zeros((batch_size, input_height, input_width, input_channel), dtype=np.float32)
for i in xrange(batch_size):
images[i, 0:im.shape[0], 0:im.shape[1], :] = im
#channel_swap = (0, 3, 1, 2) # caffe
#images = np.transpose(images, channel_swap)
#cv2.imwrite("test.jpg", im)
return images def get_parser():
"""
create a parser to parse argument "--cpu_num --inter_op_threads --intra_op_threads"
"""
parser = argparse.ArgumentParser(description="Specify tensorflow parallelism")
parser.add_argument("--cpu_num", dest="cpu_num", default=1, help="specify how many cpus to use.(default: 1)")
parser.add_argument("--inter_op_threads", dest="inter_op_threads", default=1, help="specify max inter op parallelism.(default: 1)")
parser.add_argument("--intra_op_threads", dest="intra_op_threads", default=1, help="specify max intra op parallelism.(default: 1)")
parser.add_argument("--dump_timeline", dest="dump_timeline", default=False, help="specify to dump timeline.(default: False)")
return parser def main(): parser = get_parser()
args = parser.parse_args()
#parser.print_help()
cpu_num = int(args.cpu_num)
inter_op_threads = int(args.inter_op_threads)
intra_op_threads = int(args.intra_op_threads)
dump_timeline = bool(args.dump_timeline)
print("cpu_num: ", cpu_num)
print("inter_op_threads: ", inter_op_threads)
print("intra_op_threads: ", intra_op_threads)
print("dump_timeline: ", dump_timeline) config = tf.ConfigProto(device_count={"CPU": cpu_num}, # limit to num_cpu_core CPU usage
inter_op_parallelism_threads = inter_op_threads,
intra_op_parallelism_threads = intra_op_threads,
log_device_placement=False)
with tf.Session(config = config) as sess:
imgs = make_fake_input(1, 224, 224, 3)
#init_start = time.time()
saver = tf.train.import_meta_graph("slim_model/slim_model.ckpt.meta")
saver.restore(sess, tf.train.latest_checkpoint("slim_model/")) ## Operations
#for op in tf.get_default_graph().get_operations():
# print(op.name)
# print(op.values()) graph = tf.get_default_graph()
input_data = graph.get_tensor_by_name("Placeholder:0")
fc6 = graph.get_tensor_by_name("resnet_v2/avg_fc_fc6_Conv2D/BiasAdd:0")
#init_end = time.time()
#print("initialization time: ", init_end-init_start, "s") time_start = time.time()
for step in range(200):
if dump_timeline:
run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
run_metadata = tf.RunMetadata()
result = sess.run(fc6, feed_dict={input_data:imgs}, options=run_options, run_metadata=run_metadata)
tm = timeline.Timeline(run_metadata.step_stats)
ctf = tm.generate_chrome_trace_format()
with open('timeline.json', 'w') as f:
f.write(ctf)
else:
result = sess.run(fc6, feed_dict={input_data:imgs})
print(result[0][0][0])
time_end = time.time()
avg_time = (time_end-time_start) * 1000 / 200;
print("AVG Time: ", avg_time, " ms")
return 0 if __name__ == "__main__":
sys.exit(main())

tensorflow 中 inter_op 和 intra_op的更多相关文章

  1. Tensorflow中的padding操作

    转载请注明出处:http://www.cnblogs.com/willnote/p/6746668.html 图示说明 用一个3x3的网格在一个28x28的图像上做切片并移动 移动到边缘上的时候,如果 ...

  2. CNN中的卷积核及TensorFlow中卷积的各种实现

    声明: 1. 我和每一个应该看这篇博文的人一样,都是初学者,都是小菜鸟,我发布博文只是希望加深学习印象并与大家讨论. 2. 我不确定的地方用了"应该"二字 首先,通俗说一下,CNN ...

  3. python/numpy/tensorflow中,对矩阵行列操作,下标是怎么回事儿?

    Python中的list/tuple,numpy中的ndarrray与tensorflow中的tensor. 用python中list/tuple理解,仅仅是从内存角度理解一个序列数据,而非数学中标量 ...

  4. [翻译] Tensorflow中name scope和variable scope的区别是什么

    翻译自:https://stackoverflow.com/questions/35919020/whats-the-difference-of-name-scope-and-a-variable-s ...

  5. SSD:TensorFlow中的单次多重检测器

    SSD:TensorFlow中的单次多重检测器 SSD Notebook 包含 SSD TensorFlow 的最小示例. 很快,就检测出了两个主要步骤:在图像上运行SSD网络,并使用通用算法(top ...

  6. 在 TensorFlow 中实现文本分类的卷积神经网络

    在TensorFlow中实现文本分类的卷积神经网络 Github提供了完整的代码: https://github.com/dennybritz/cnn-text-classification-tf 在 ...

  7. [开发技巧]·TensorFlow中numpy与tensor数据相互转化

    [开发技巧]·TensorFlow中numpy与tensor数据相互转化 个人主页–> https://xiaosongshine.github.io/ - 问题描述 在我们使用TensorFl ...

  8. TensorFlow中的变量和常量

    1.TensorFlow中的变量和常量介绍 TensorFlow中的变量: import tensorflow as tf state = tf.Variable(0,name='counter') ...

  9. TensorFlow中的通信机制——Rendezvous(二)gRPC传输

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 本篇是TensorFlow通信机制系列的第二篇文章,主要梳理使用gRPC网络传 ...

随机推荐

  1. 多线程之Tread类和Runnable的区别

    一.run()方法和start()方法的区别 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继 ...

  2. 梯度、Hessian矩阵、平面方程的法线以及函数导数的含义

    本文转载自: Xianling Mao的专栏 =========================================================================== 想 ...

  3. Sqlserver 创建账号

    下面是通过脚本创建账号,创建一个appuser 的账号,密码:123456,可操作的DB:TEST 赋予权限,增删改查,操作视图,存储过程.当然当前的账号要有足够的权限. create login a ...

  4. 利用Eclipse CDT 阅读C/C++代码

    本文转自: https://xbgd.iteye.com/blog/1259544 常见阅读代码的工具有 , visual c++, visual studio + va(visual assista ...

  5. leetcode 12题 数字转罗马数字

    leetcode 12题 数字转罗马数字 答案一:我的代码 代码本地运行完全正确,在线运行出错 class Solution { public: string intToRoman(int num) ...

  6. FreeBSD上安装Cassandra 3.10

    哈哈,你居然点进来了,来吧,一起吐槽FreeBSD啊,装了一上午Cassandra 3.10都没有装成功, 终于,鄙人一条 shutdown -p now 结束了FreeBSD,默默打开了CentOS ...

  7. lambda表达式使用解析

    1.Predicate/Consumer/Function/Supplier介绍 Predicate boolean test(T t); Consumer accpet(T t); Function ...

  8. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_4 Mybatis的CRUD-查询一个和模糊查询

    模糊查询 测试的时候需要提供百分号的模糊查询.传入的参数提供百分号 所有包含王字的就都查询出来了.

  9. 【SpringMVC】---RequestMapping、Ant 路径、PathVariable 注解、HiddenHttpMethodFilter 过滤器、用 POJO 作为参数

    一.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  10. Web UI自动化测试基础——元素定位(二)

    本篇文章整理了元素定位的基础知识——多个元素定位方式. 一.多个元素定位方式简介 同单个元素定位方式相同,多个元素定位方式也有与之对应的8种方式,即id.name.class_name.tag_nam ...