from datetime import datetime
import math
import time
import tensorflow as tf
batch_size=32
num_batches=100
n_output=100
#定义显示节点的函数
def print_activations(t):
print(t.op.name, ' ',t.get_shape().as_list()) #定义inference函数:该函数接受图像作为输入,返回最后一层pool5及相关参数
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')
#b定义偏置值初始化为0
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,scope)
print_activations(conv1)
parameters+=[kernel,biases]
#添加LRN层与最大池化层
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,dtype=tf.float32,shape=[192]),trainable=True,name='biases')
bias=tf.nn.bias_add(conv,biases)
conv2=tf.nn.relu(bias,name=scope)
parameters+=[kernel,biases]
print_activations(conv2)
#添加LRN层与最大池化层
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(shape=[3,3,192,384],stddev=1e-1,dtype=tf.float32),name='weights')
conv=tf.nn.conv2d(pool2,kernel,[1,1,1,1],padding='SAME')
biases=tf.Variable(tf.constant(0.0,dtype=tf.float32,shape=[384]),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(shape=[3,3,384,256],stddev=1e-1,dtype=tf.float32),name='weights')
conv=tf.nn.conv2d(conv3,kernel,[1,1,1,1],padding='SAME')
biases=tf.Variable(tf.constant(0.0,dtype=tf.float32,shape=[256]),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(shape=[3,3,256,256],stddev=1e-1,dtype=tf.float32),name='weights')
conv=tf.nn.conv2d(conv4,kernel,[1,1,1,1],padding='SAME')
biases=tf.Variable(tf.constant(0.0,dtype=tf.float32,shape=[256]),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 all_contact(pool5,keep_prob):
pool_shape=pool5.get_shape().as_list()
nodes=[-1,pool_shape[1]*pool_shape[2]*pool_shape[3]]
densel=tf.reshape(pool5,nodes)
with tf.name_scope('fc1'):
w1=tf.Variable(tf.truncated_normal([9216,1024],stddev=1e-1),name='w1')
b1=tf.Variable(tf.constant(0.0,tf.float32,shape=[1024]),trainable=True,name='b1')
fc1=tf.nn.relu(tf.nn.bias_add(tf.matmul(densel,w1),b1))
#设置dropout层
fc1_drop=tf.nn.dropout(fc1,keep_prob)
print_activations(fc1_drop) with tf.name_scope('fc2'):
w2=tf.Variable(tf.truncated_normal([1024,1024],stddev=1e-1),name='w2')
b2=tf.Variable(tf.constant(0.0,tf.float32,shape=[1024]),trainable=True,name='b1')
fc2=tf.nn.relu(tf.nn.bias_add(tf.matmul(fc1_drop,w2),b2))
#设置dropout层
fc2_drop=tf.nn.dropout(fc2,keep_prob)
print_activations(fc2_drop) with tf.name_scope('fc3'):
w3=tf.Variable(tf.truncated_normal([1024,n_output],stddev=1e-1),name='w3')
b3=tf.Variable(tf.constant(0.0,tf.float32,shape=[n_output]),trainable=True,name='b1')
fc3=tf.nn.relu(tf.nn.bias_add(tf.matmul(fc2_drop,w3),b3))
print_activations(fc3)
return fc3 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)
all_contact(pool5,1.0)
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()

Tensorflow框架之AlexNet的更多相关文章

  1. TensorFlow框架(3)之MNIST机器学习入门

    1. MNIST数据集 1.1 概述 Tensorflow框架载tensorflow.contrib.learn.python.learn.datasets包中提供多个机器学习的数据集.本节介绍的是M ...

  2. TensorFlow框架(5)之机器学习实践

    1. Iris data set Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据集,分为3类, ...

  3. 人工智能 tensorflow框架-->简介及安装01

    简介:Tensorflow是google于2015年11月开源的第二代机器学习框架. Tensorflow名字理解:图形边中流动的数据叫张量(Tensor),因此叫Tensorflow 既 张量流动 ...

  4. 【TensorFlow篇】--Tensorflow框架实现SoftMax模型识别手写数字集

    一.前述 本文讲述用Tensorflow框架实现SoftMax模型识别手写数字集,来实现多分类. 同时对模型的保存和恢复做下示例. 二.具体原理 代码一:实现代码 #!/usr/bin/python ...

  5. 【TensorFlow篇】--Tensorflow框架初始,实现机器学习中多元线性回归

    一.前述 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T ...

  6. 跟我学算法-吴恩达老师(超参数调试, batch归一化, softmax使用,tensorflow框架举例)

    1. 在我们学习中,调试超参数是非常重要的. 超参数的调试可以是a学习率,(β1和β2,ε)在Adam梯度下降中使用, layers层数, hidden units 隐藏层的数目, learning_ ...

  7. 深度学习Tensorflow框架的安装

    选择下载安装Anaconda3.4.2.0-python3.5版本安装(3.6版本不适合后面opencv-python的安装): 打开Anaconda Prompt命令窗口编辑界面(黑窗口),输入py ...

  8. 吴裕雄--天生自然 神经网络人工智能项目:基于深度学习TENSORFLOW框架的图像分类与目标跟踪报告(续四)

    2. 神经网络的搭建以及迁移学习的测试 7.项目总结 通过本次水果图片卷积池化全连接试验分类项目的实践,我对卷积.池化.全连接等相关的理论的理解更加全面和清晰了.试验主要采用python高级编程语言的 ...

  9. python机器学习TensorFlow框架

    TensorFlow框架 关注公众号"轻松学编程"了解更多. 一.简介 ​ TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运 ...

随机推荐

  1. tomcat启动错误org.springframework.beans.factory.CannotLoadBeanClassException的解决

    tomcat启动时一直报这个错误,但是报错的类确实存在. 清空tomcat,更新maven项目,重配tomcat都没有解决. 最后解决办法: Eclipse环境:Project-->clean ...

  2. git提交代码到码云

    日常代码一般提交到github比较多,但我还是钟爱马爸爸,没错就是码云. 码云是中文版的代码托管的网站,不存在打开网速问题,使用也蛮方便的,日常自己保存托管代码已经足够,平时使用git提交代码到码云是 ...

  3. Java中的集合框架-Collection(一)

    一,Collection接口 在日常的开发工作中,我们经常使用数组,但是数组是有很多的局限性的,比如:数组大小固定后不可修改,只能存储基本类型的值等等. 基于数组的这些局限性,Java框架就产生了用于 ...

  4. oracle基础知识过一遍(原创)

    用户.角色.权限.表空间 create tablespace test1_tablespace datafile ‘test1file.dbf’ size 10m; create temporary  ...

  5. jQuery对象与DOM对象的相互转化

    jQuery是一个类数组对象,DOM对象就是一个单独的DOM元素,他们都是可以操作的DOM元素. 一.jQuery对象转化为DOM对象 有以下两种方法: 方法一:利用数组下标的方式读取jQuery中的 ...

  6. 含头结点的单链表C++实现(包含创建,查找,插入,追加,删除,反转,排序,合并,打印,清空,销毁等基本操作)

    温馨提示:下面代码默认链表数据为字符型,本代码仅供参考,希望能对找到本随笔的人有所帮助! #include<iostream> using namespace std; typedef s ...

  7. thinkphp+redis实现秒杀,缓存等功能

    秒杀是商城常见功能  php+redis是最常见的秒杀功能 1,安装redis,根据自己的php版本安装对应的redis扩展 首先查看phpinfo();php环境信息 2,下载redis https ...

  8. python列表的通用操作

    #'+'和'*'#+可以将两个列表拼接为一个列表my_list = [1,2,3]+[4,5,6]#*可以将列表重复指定的次数my_list = [1,2,3]*5 print(my_list) #创 ...

  9. Python学习 :面向对象 -- 类的成员

    类的成员 一.字段 - 字段可以分为'普通字段'和'静态字段'两种 - 普通字段(保存在对象中,执行时只能通过对象来进行访问) - 静态字段(保存在类中,在内存中只保存一份数据(可以有效地节约内存的空 ...

  10. 用python实现购物车功能

    """功能要求:1.要求用户输入自己拥有的总资产,例如:20002.显示商品列表的序号,商品名称,商品价格,让用户根据序号选择商品,然后加入购物车 例如: 1 电脑 19 ...