TensorFlow实战-AlexNet

  1 # 导入数据
  2 from tensorflow.examples.tutorials.mnist import input_data
  3 # 读取数据
  4 mnist=input_data.read_data_sets("MNIST_data/",one_hot=True)
  5 import tensorflow as tf
  6
  7 # 定义卷积操作函数
  8 def conv2d(name,x,w,b):
  9     return tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(x,w,strides=[1,1,1,1],padding=‘SAME‘),b),name=name)
 10
 11 # 定义下采样操作函数
 12 def max_pool(name,x,k):
 13     return tf.nn.max_pool(x,ksize=[1,k,k,1],strides=[1,k,k,1],padding=‘SAME‘,name=name)
 14
 15 # 定义归一化函数
 16 def norm(name,x,lsize=4):
 17     return tf.nn.lrn(x,lsize,bias=1.0,alpha=0.001/9,beta=0.75,name=name)
 18
 19 # 正式定义alex_net网络结构
 20 def alex_net(_X,_weights,_biases,_dropout):
 21     # 对输入进行形变
 22     _X=tf.reshape(_X,shape=[-1,28,28,1])
 23
 24     # 构建第一个卷积层
 25     conv1=conv2d(‘conv1‘,_X,_weights[‘wc1‘],_biases[‘bc1‘])
 26     pool1=max_pool(‘pool1‘,conv1,k=2)
 27     norm1=norm(‘norm1‘,pool1,lsize=4)
 28     drop1=tf.nn.dropout(norm1,_dropout)
 29
 30     # 构建第二个卷积层
 31     conv2=conv2d(‘conv2‘,drop1,_weights[‘wc2‘],_biases[‘bc2‘])
 32     pool2=max_pool(‘pool2‘,conv2,k=2)
 33     norm2=norm(‘norm2‘,pool2,lsize=4)
 34     drop2=tf.nn.dropout(norm2,_dropout)
 35
 36     # 构建第三个卷积层
 37     conv3=conv2d(‘conv3‘,drop2,_weights[‘wc3‘],_biases[‘bc3‘])
 38     pool3=max_pool(‘pool3‘,conv3,k=2)
 39     norm3=norm(‘norm3‘,pool3,lsize=4)
 40     drop3=tf.nn.dropout(norm3,_dropout)
 41
 42     # 对输出进行形变,然后连接三个全连接层
 43     dense1=tf.reshape(drop3,shape=[-1,_weights[‘wd1‘].get_shape().as_list()[0]])
 44     dense1=tf.nn.relu(tf.matmul(dense1,_weights[‘wd1‘])+_biases[‘bd1‘],name=‘fc1‘)
 45     dense2=tf.nn.relu(tf.matmul(dense1,_weights[‘wd2‘])+_biases[‘bd2‘],name=‘fc2‘)
 46     out=tf.matmul(dense2,_weights[‘out‘]+_biases[‘out‘])
 47     return out
 48
 49 # 设置网络训练参数
 50 learning_rate=0.001
 51 training_iters=200000
 52 batch_size=64
 53 display_step=20
 54
 55 # 设置数据参数
 56 n_input=784
 57 n_classes=10
 58 dropout=0.8
 59
 60 # 占位符输入 有的版本写成 tf.types.float32
 61 x=tf.placeholder(tf.float32,[None,n_input])
 62 y=tf.placeholder(tf.float32,[None,n_classes])
 63 keep_prob=tf.placeholder(tf.float32)
 64
 65 # 设置网络核的大小,层数,采样步长等
 66 weights={
 67     ‘wc1‘:tf.Variable(tf.random_normal([3,3,1,64])),
 68     ‘wc2‘:tf.Variable(tf.random_normal([3,3,64,128])),
 69     ‘wc3‘:tf.Variable(tf.random_normal([3,3,128,256])),
 70     ‘wd1‘:tf.Variable(tf.random_normal([4*4*256,1024])),
 71     ‘wd2‘:tf.Variable(tf.random_normal([1024,1024])),
 72     ‘out‘:tf.Variable(tf.random_normal([1024,10]))
 73     }
 74
 75 biases={
 76     ‘bc1‘:tf.Variable(tf.random_normal([64])),
 77     ‘bc2‘:tf.Variable(tf.random_normal([128])),
 78     ‘bc3‘:tf.Variable(tf.random_normal([256])),
 79     ‘bd1‘:tf.Variable(tf.random_normal([1024])),
 80     ‘bd2‘:tf.Variable(tf.random_normal([1024])),
 81     ‘out‘:tf.Variable(tf.random_normal([n_classes]))
 82 }
 83
 84 # 构建一个alex_net网络,并根据输入预测输出结果
 85 pred=alex_net(x,weights,biases,keep_prob)
 86
 87 # 根据预测值pred和真实标签y,构建损失函数
 88 cost=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred,y))
 89 // 设置优化函数,最小化损失函数
 90 optimizer=tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
 91
 92 # 设置测试网络
 93 correct_pred=tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
 94 accuracy=tf.reduce_mean(tf.cast(correct_pred,tf.float32))
 95
 96 # 初始化网络所有对权重  有的版本写成 global_variables_initializer
 97 init=tf.initialize_all_variables()
 98
 99 with tf.Session() as sess:
100      # 初始化网络权值
101      sess.run(init)
102      step = 1
103
104      # 开始训练网络,直到达到最大迭代次数
105      while step * batch_size < training_iters:
106          # 获取批数据
107          batch_xs, batch_ys = mnist.train.next_batch(batch_size)
108
109          # 根据批数据训练网络
110          sess.run(optimizer, feed_dict={x: batch_xs, y: batch_ys, keep_prob: dropout})
111
112          # 打印输出
113          if step % display_step == 0:
114              # 计算精度
115              acc = sess.run(accuracy, feed_dict={x: batch_xs, y: batch_ys, keep_prob: 1.})
116              # 计算损失值
117              loss = sess.run(cost, feed_dict={x: batch_xs, y: batch_ys, keep_prob: 1.})
118              print "Iter " + str(step*batch_size) + ", Minibatch Loss= " + "{:.6f}".format(loss) + ", Training Accuracy= " + "{:.5f}".format(acc)
119          step += 1
120
121      print "Optimization Finished!"
122      # 计算测试精度
123      print "Testing Accuracy:", sess.run(accuracy, feed_dict={x: mnist.test.images[:256], y: mnist.test.labels[:256], keep_prob: 1.})

AlexNet:

获得里ILSVRC比赛分类项目的2012年冠军(top-5错误率16.4%,使用额外数据可达到15.3%,8层神经网络 3 conv+2 pooling+3 fc)

首次在CNN中成功应用里ReLU Dropout和LRN等Trick:

成功使用ReLU作为CNN的激活函数,并验证其效果在较深对网络超过里Sigmoid,成功解决里Sigmoid在网络较深时对梯度弥散问题。

虽然ReLU激活函数在很久之前就被提出,但是直到AlexNet的出现才将其发扬光大。

训练时使用

时间: 2024-11-05 12:30:09

TensorFlow实战-AlexNet的相关文章

TensorFlow实战之实现AlexNet经典卷积神经网络

本文已同步本人另外一个博客(http://blog.csdn.net/qq_37608890/article/details/79371347) 本文根据最近学习TensorFlow书籍网络文章的情况,特将一些学习心得做了总结,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. 一.AlexNet模型及其基本原理阐述 1.关于AlexNet 2012年,AlexKrizhevsky提出了深度卷积神经网络模型AlexNet,可以看作LeNet的一种更深更宽的版本.该模型包含了6亿3000万个连

《Tensorflow实战Google深度学习框架》PDF一套四本+源代码_高清_完整

TensorFlow实战 热门Tensorflow实战书籍PDF高清版一套共四本+源代码,包含<Tensorflow实战>.<Tensorflow:实战Google深度学习框架(完整版)>.<TensorFlow:实战Google深度学习框架(第2版)>与<TensorFlow技术解析与实战>,不能错过的学习Tensorflow书籍. TensorFlow是谷歌2015年开源的主流深度学习框架,目前已在谷歌.优步(Uber).京东.小米等科技公司广泛应用.&

TensorFlow实战之CNN实现对鸡蛋的分类

本文标签: TensorFlow TensorFlow实战之CNN 3.1问题分析 为了评估N个鸡蛋中是否有圈养鸡蛋,我们利用卷积神经网络(CNN)让计算机学习圈养鸡蛋和土鸡蛋图片的特征,然后根据鸡蛋的图片将其分类.通过对图片的预处理,将其转化为32*32相同大小的图片.在神经网络加载数据之后,会将其转化为32*32*3的数组.然后通过卷积和池化等一系列操作提取出图片的特征.以达到对鸡蛋进行分类的目的.我们主要用Python语言在TensorFlow中构建卷积神经网络(CNN),让CNN学习圈养

TensorFlow实战--阅读笔记part4

Tensorflow实现经典神经网络 一.Tensorflow实现AlexNet 2012年,Hinton的学生Alex Krizhevsky提出了深度卷积神经网络模型AlexNet,它算是LeNet的一种更深更宽的版本.它包含了几个比较新的技术点,也首次在CNN中成功应用了ReLU,Dropout和LRN等trick.同时AlexNet也使用了GPU进行运算加速,AlexNet包括了6亿3000万个连接,6000万个参数和65万个神经元,拥有5个卷积层. AlexNet主要使用到的新技术有如下

[Tensorflow实战Google深度学习框架

本系列为Tensorflow实战Google深度学习框架知识笔记,仅为博主看书过程中觉得较为重要的知识点,简单摘要下来,内容较为零散,请见谅. 2017-11-06 [第五章] MNIST数字识别问题 1. MNIST数据处理 为了方便使用,Tensorflow提供了一个类来处理MNIST数据,这个类会自动下载并转化MNIST数据的格式,将数据从原始的数据包中解析成训练和测试神经网络时使用的格式. 2. 神经网络模型训练及不同模型结果对比 为了评测神经网络模型在不同参数下的效果,一般会从训练数据

【深度学习系列】用PaddlePaddle和Tensorflow实现AlexNet

上周我们用PaddlePaddle和Tensorflow实现了图像分类,分别用自己手写的一个简单的CNN网络simple_cnn和LeNet-5的CNN网络识别cifar-10数据集.在上周的实验表现中,经过200次迭代后的LeNet-5的准确率为60%左右,这个结果差强人意,毕竟是二十年前写的网络结构,结果简单,层数也很少,这一节中我们讲讲在2012年的Image比赛中大放异彩的AlexNet,并用AlexNet对cifar-10数据进行分类,对比上周的LeNet-5的效果. 什么是AlexN

TensorFlow实战之Softmax Regression识别手写数字

     关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.csdn.net/qq_37608890/article/details/79343860).        本文根据最近学习TensorFlow书籍网络文章的情况,特将一些学习心得做了总结,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. 一.相关概念 1.MNIST MNIST(Mixed

分享《TensorFlow实战Google深度学习框架 (第2版) 》中文版PDF和源代码

下载:https://pan.baidu.com/s/1aD1Y2erdtppgAbk8c63xEw 更多最新的资料:http://blog.51cto.com/3215120 <TensorFlow实战Google深度学习框架(第2版)>中文版PDF和源代码中文版PDF,带目录标签,文字可以复制,363页.配套源代码:经典书籍,讲解详细:如图 原文地址:https://www.cnblogs.com/javapythonstudy/p/9873505.html

《TensorFlow实战Google深度学习框架 (第2版) 》中文版PDF和源代码

下载:https://pan.baidu.com/s/1aD1Y2erdtppgAbk8c63xEw 更多最新的资料:http://blog.51cto.com/3215120 <TensorFlow实战Google深度学习框架(第2版)>中文版PDF和源代码中文版PDF,带目录标签,文字可以复制,363页.配套源代码:经典书籍,讲解详细:如图 原文地址:http://blog.51cto.com/3215120/2310423