Tensorflow实现AlexNet卷积神经网络及运算时间评测


Posted in Python onMay 24, 2018

本文实例为大家分享了Tensorflow实现AlexNet卷积神经网络的具体实现代码,供大家参考,具体内容如下

之前已经介绍过了AlexNet的网络构建了,这次主要不是为了训练数据,而是为了对每个batch的前馈(Forward)和反馈(backward)的平均耗时进行计算。在设计网络的过程中,分类的结果很重要,但是运算速率也相当重要。尤其是在跟踪(Tracking)的任务中,如果使用的网络太深,那么也会导致实时性不好。

from datetime import datetime
import math
import time
import tensorflow as tf

batch_size = 32
num_batches = 100

def print_activations(t):
 print(t.op.name, '', t.get_shape().as_list())

def inference(images):
 parameters = []

 with tf.name_scope('conv1') as scope:
  kernel = tf.Variable(tf.truncated_normal([11, 11, 3, 64], dtype = tf.float32, stddev = 1e-1), name = 'weights')
  conv = tf.nn.conv2d(images, kernel, [1, 4, 4, 1], padding = 'SAME')
  biases = tf.Variable(tf.constant(0.0, shape = [64], dtype = tf.float32), trainable = True, name = 'biases')
  bias = tf.nn.bias_add(conv, biases)
  conv1 = tf.nn.relu(bias, name = scope)
  print_activations(conv1)
  parameters += [kernel, biases]

  lrn1 = tf.nn.lrn(conv1, 4, bias = 1.0, alpha = 0.001 / 9, beta = 0.75, name = 'lrn1')
  pool1 = tf.nn.max_pool(lrn1, ksize = [1, 3, 3, 1], strides = [1, 2, 2, 1], padding = 'VALID', name = 'pool1')
  print_activations(pool1)

 with tf.name_scope('conv2') as scope:
  kernel = tf.Variable(tf.truncated_normal([5, 5, 64, 192], dtype = tf.float32, stddev = 1e-1), name = 'weights')
  conv = tf.nn.conv2d(pool1, kernel, [1, 1, 1, 1], padding = 'SAME')
  biases = tf.Variable(tf.constant(0.0, shape = [192], dtype = tf.float32), trainable = True, name = 'biases')
  bias = tf.nn.bias_add(conv, biases)
  conv2 = tf.nn.relu(bias, name = scope)
  parameters += [kernel, biases]
  print_activations(conv2)

  lrn2 = tf.nn.lrn(conv2, 4, bias = 1.0, alpha = 0.001 / 9, beta = 0.75, name = 'lrn2')
  pool2 = tf.nn.max_pool(lrn2, ksize = [1, 3, 3, 1], strides = [1, 2, 2, 1], padding = 'VALID', name = 'pool2')
  print_activations(pool2)

 with tf.name_scope('conv3') as scope:
  kernel = tf.Variable(tf.truncated_normal([3, 3, 192, 384], dtype = tf.float32, stddev = 1e-1), name = 'weights')
  conv = tf.nn.conv2d(pool2, kernel, [1, 1, 1, 1], padding = 'SAME')
  biases = tf.Variable(tf.constant(0.0, shape = [384], dtype = tf.float32), trainable = True, name = 'biases')
  bias = tf.nn.bias_add(conv, biases)
  conv3 = tf.nn.relu(bias, name = scope)
  parameters += [kernel, biases]
  print_activations(conv3)

 with tf.name_scope('conv4') as scope:
  kernel = tf.Variable(tf.truncated_normal([3, 3, 384, 256], dtype = tf.float32, stddev = 1e-1), name = 'weights')
  conv = tf.nn.conv2d(conv3, kernel, [1, 1, 1, 1], padding = 'SAME')
  biases = tf.Variable(tf.constant(0.0, shape = [256], dtype = tf.float32), trainable = True, name = 'biases')
  bias = tf.nn.bias_add(conv, biases)
  conv4 = tf.nn.relu(bias, name = scope)
  parameters += [kernel, biases]
  print_activations(conv4)

 with tf.name_scope('conv5') as scope:
  kernel = tf.Variable(tf.truncated_normal([3, 3, 256, 256], dtype = tf.float32, stddev = 1e-1), name = 'weights')
  conv = tf.nn.conv2d(conv4, kernel, [1, 1, 1, 1], padding = 'SAME')
  biases = tf.Variable(tf.constant(0.0, shape = [256], dtype = tf.float32), trainable = True, name = 'biases')
  bias = tf.nn.bias_add(conv, biases)
  conv5 = tf.nn.relu(bias, name = scope)
  parameters += [kernel, biases]
  print_activations(conv5)

  pool5 = tf.nn.max_pool(conv5, ksize = [1, 3, 3, 1], strides = [1, 2, 2, 1], padding = 'VALID', name = 'pool5')
  print_activations(pool5)

  return pool5, parameters

def time_tensorflow_run(session, target, info_string):
 num_steps_burn_in = 10
 total_duration = 0.0
 total_duration_squared = 0.0

 for i in range(num_batches + num_steps_burn_in):
  start_time = time.time()
  _ = session.run(target)
  duration = time.time() - start_time
  if i >= num_steps_burn_in:
   if not i % 10:
    print('%s: step %d, duration = %.3f' %(datetime.now(), i - num_steps_burn_in, duration))
   total_duration += duration
   total_duration_squared += duration * duration

 mn = total_duration / num_batches
 vr = total_duration_squared / num_batches - mn * mn
 sd = math.sqrt(vr)
 print('%s: %s across %d steps, %.3f +/- %.3f sec / batch' %(datetime.now(), info_string, num_batches, mn, sd))

def run_benchmark():
 with tf.Graph().as_default():
  image_size = 224
  images = tf.Variable(tf.random_normal([batch_size, image_size, image_size, 3], dtype = tf.float32, stddev = 1e-1))
  pool5, parameters = inference(images)

  init = tf.global_variables_initializer()
  sess = tf.Session()
  sess.run(init)

  time_tensorflow_run(sess, pool5, "Forward")

  objective = tf.nn.l2_loss(pool5)
  grad = tf.gradients(objective, parameters)
  time_tensorflow_run(sess, grad, "Forward-backward")


run_benchmark()

这里的代码都是之前讲过的,只是加了一个计算时间和现实网络的卷积核的函数,应该很容易就看懂了,就不多赘述了。我在GTX TITAN X上前馈大概需要0.024s, 反馈大概需要0.079s。哈哈,自己动手试一试哦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单文件操作python 修改文件指定行的方法
May 15 Python
详细解析Python中__init__()方法的高级应用
May 11 Python
浅析Python中的join()方法的使用
May 19 Python
在Python中操作时间之tzset()方法的使用教程
May 22 Python
编写Python小程序来统计测试脚本的关键字
Mar 12 Python
Python中Django发送带图片和附件的邮件
Mar 31 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
python 实现多线程下载视频的代码
Nov 15 Python
python循环输出三角形图案的例子
Nov 22 Python
python如何保存文本文件
Jun 07 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 Python
Tensorflow卷积神经网络实例进阶
May 24 #Python
Tensorflow卷积神经网络实例
May 24 #Python
使用pandas的DataFrame的plot方法绘制图像的实例
May 24 #Python
TensorFlow实现卷积神经网络
May 24 #Python
tensorflow实现简单的卷积神经网络
May 24 #Python
tensorflow实现简单的卷积网络
May 24 #Python
解决pandas 作图无法显示中文的问题
May 24 #Python
You might like
php的memcached客户端memcached
2011/06/14 PHP
学习php中的正则表达式
2014/08/17 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
基于jquery库的tab新形式使用
2012/11/16 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
Python with的用法
2014/08/22 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
Python实现图片拼接的代码
2018/07/02 Python
Python定时任务sched模块用法示例
2018/07/16 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
django使用graphql的实例
2020/09/02 Python
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
几个人围成一圈的问题
2013/09/26 面试题
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
优秀党员个人总结
2015/02/14 职场文书
入党积极分子考察意见
2015/06/02 职场文书
吴仁宝观后感
2015/06/09 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
python某漫画app逆向
2021/03/31 Python
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python