Tensorflow框架之AlexNet
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的更多相关文章
- TensorFlow框架(3)之MNIST机器学习入门
1. MNIST数据集 1.1 概述 Tensorflow框架载tensorflow.contrib.learn.python.learn.datasets包中提供多个机器学习的数据集.本节介绍的是M ...
- TensorFlow框架(5)之机器学习实践
1. Iris data set Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据集,分为3类, ...
- 人工智能 tensorflow框架-->简介及安装01
简介:Tensorflow是google于2015年11月开源的第二代机器学习框架. Tensorflow名字理解:图形边中流动的数据叫张量(Tensor),因此叫Tensorflow 既 张量流动 ...
- 【TensorFlow篇】--Tensorflow框架实现SoftMax模型识别手写数字集
一.前述 本文讲述用Tensorflow框架实现SoftMax模型识别手写数字集,来实现多分类. 同时对模型的保存和恢复做下示例. 二.具体原理 代码一:实现代码 #!/usr/bin/python ...
- 【TensorFlow篇】--Tensorflow框架初始,实现机器学习中多元线性回归
一.前述 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T ...
- 跟我学算法-吴恩达老师(超参数调试, batch归一化, softmax使用,tensorflow框架举例)
1. 在我们学习中,调试超参数是非常重要的. 超参数的调试可以是a学习率,(β1和β2,ε)在Adam梯度下降中使用, layers层数, hidden units 隐藏层的数目, learning_ ...
- 深度学习Tensorflow框架的安装
选择下载安装Anaconda3.4.2.0-python3.5版本安装(3.6版本不适合后面opencv-python的安装): 打开Anaconda Prompt命令窗口编辑界面(黑窗口),输入py ...
- 吴裕雄--天生自然 神经网络人工智能项目:基于深度学习TENSORFLOW框架的图像分类与目标跟踪报告(续四)
2. 神经网络的搭建以及迁移学习的测试 7.项目总结 通过本次水果图片卷积池化全连接试验分类项目的实践,我对卷积.池化.全连接等相关的理论的理解更加全面和清晰了.试验主要采用python高级编程语言的 ...
- python机器学习TensorFlow框架
TensorFlow框架 关注公众号"轻松学编程"了解更多. 一.简介 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运 ...
随机推荐
- .NET Core中基类可以反射子类的成员
我们定义一个类DemoA,再定义一个类DemoB继承DemoA.当构造一个DemoB类对象后,我们可以通过其调用基类DemoA中的方法来反射子类DemoB的成员. 新建一个.NET Core控制台项目 ...
- Linux 不杀进程的情况下,如何释放磁盘资源
最近项目组人员反馈一个问题:即磁盘空间满了,但是并没看到有什么文件占用空间: [root@xxxx home]# df -h Filesystem Size Used Avail Use% Mount ...
- Mac 模拟慢速网络
作为开发者,为了提升用户体验,有时需要模拟不同环境的网络.Mac环境下模拟慢速网络可以使用苹果官方提供的工具:Network Link Conditioner. 1.点击苹果开发者网站提供的下载页面, ...
- MySQL学习【第九篇存储引擎】
一.存储引擎介绍 1.我们知道mysql程序构成由连接层,sql层,存储引擎层.存储引擎层和磁盘进行交互,由其去取数据,而我们取得数据是表的形式展现出来,谁做的呢?就是存储引擎结构化成表的形式返回给用 ...
- 虚拟机重启网络服务失败,当查看状态显示错误Failed to start LSB......
重启网络失败截图 从本质上来看出现这样的问题,是因为拷贝过来的虚拟机重新分配了网卡MAC地址.这样造成的结果是配置文件中MAC与当前网卡MAC不一致.所以只需要修改一下配置文件即可. 用ip addr ...
- ajax与jsonp定义及使用方法
ajax 定义 ajax技术的目的是让javascript发送http请求,与后台通信,获取数据和信息. ajax通信的过程不会影响后续javascript的执行,从而实现异步. 同步和异步 现实生活 ...
- 怎样获取最新版的javascript文件,解决被浏览器缓存的问题
假设有一个js文件(以jquery为例),在服务器上的URL地址为:../js/jquery.js . 当某天jquery版本更新了,用最新版的jquery文件覆盖了原来旧版的jquery文件. 这时 ...
- pdf.js 打印出错
两种方法:1.使用0.8.223版本的pdf.js2.viewer.js中 line 3642 PRINT_OUTPUT_SCALE=1,line 3639 pdfPage.getViewPort(2 ...
- MYSQL 入门全套
MySQL简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅 ...
- RuntimeError: Cannot run in multiple processes: IOLoop instance has already been initialized. You cannot call IOLoop.instance() before calling start_processes()
解决方法: settings中的debug改为false,或者注释掉 参照: https://stackoverflow.com/questions/32521122/cannot-run-in-mu ...