# AlexNet网络的结构详解与实现

### 一：AlexNet网络结构

• CONV表示卷积层
• LRN 表示局部响应归一化
• POOL表示池化层
• FC表示全连接层
• ReLU表示激活函数
• Dropout表示参与训练神经元百分比，针对全连接层。

### 二：AlexNet网络实现

import tensorflow as tf

class AlexNet_CNN:

def __init__(self, x, keep_prob, num_class, skip_layer):
self.X = x
self.KEEP_PROB = keep_prob
self.NUM_CLASS = num_class
self.SKIP_LAYER = skip_layer
print("AlexNet Network...")

def create(self):
with tf.name_scope("conv1") as scope:
kernel = tf.Variable(tf.truncated_normal([11, 11, 3, 96], dtype=tf.float32, stddev=1e-1), name='weights1')
conv1 = tf.nn.conv2d(self.X, kernel, strides=[1, 4, 4, 1], padding='VALID')
pool1 = tf.nn.max_pool(lrn1, ksize=[1, 3, 3, 1],
strides=[1, 2, 2, 1],
print("pool1", pool1.shape)
with tf.name_scope("conv2") as scope:
kernel = tf.Variable(tf.truncated_normal([5, 5, 96, 256], dtype=tf.float32, stddev=1e-1), name='weights2')
conv2 = tf.nn.conv2d(pool1, kernel, strides=[1, 1, 1, 1], padding='SAME')
lrn2 = tf.nn.lrn(conv2, depth_radius=2, bias=1.0, alpha=1e-05, beta=0.75)
pool2 = tf.nn.max_pool(lrn2, ksize=[1, 3, 3, 1],
strides=[1, 2, 2, 1],

print("pool2",pool2.shape)
with tf.name_scope("conv3") as scope:
kernel = tf.Variable(tf.truncated_normal([3, 3, 256, 384], dtype=tf.float32, stddev=1e-1), name='weights3')
conv3 = tf.nn.conv2d(pool2, kernel, strides=[1, 1, 1, 1], padding='SAME')
print("conv3",conv3.shape)

with tf.name_scope("conv4") as scope:
kernel = tf.Variable(tf.truncated_normal([3, 3, 384, 384], dtype=tf.float32, stddev=1e-1), name='weights4')
conv4 = tf.nn.conv2d(conv3, kernel, strides=[1, 1, 1, 1], padding='SAME')
print("conv4",conv4.shape)

with tf.name_scope("conv5") as scope:
kernel = tf.Variable(tf.truncated_normal([3, 3, 384, 256], dtype=tf.float32, stddev=1e-1), name='weights5')
conv5 = tf.nn.conv2d(conv4, kernel, strides=[1, 1, 1, 1], padding='SAME')
pool5 = tf.nn.max_pool(conv5, ksize=[1, 3, 3, 1],
strides=[1, 2, 2, 1],

with tf.name_scope("fc6") as scope:
print("pool5", pool5.shape)
flattened = tf.reshape(pool5, [-1, 6 * 6 * 256])
weights = tf.Variable(tf.random_normal([6*6*256, 4096]))
biases = tf.Variable(tf.random_normal([4096]))

# Matrix multiply weights and inputs and add bias
act = tf.nn.xw_plus_b(flattened, weights, biases, name="fc6")
fc6 = tf.nn.relu(act)
dp6 = tf.nn.dropout(fc6,keep_prob=self.KEEP_PROB)

with tf.name_scope("fc7") as scope:
weights = tf.Variable(tf.random_normal([4096, 4096]))
biases = tf.Variable(tf.random_normal([4096]))

# Matrix multiply weights and inputs and add bias
act = tf.nn.xw_plus_b(dp6, weights, biases, name="fc7")
fc7 = tf.nn.relu(act)
dp7 = tf.nn.dropout(fc7, keep_prob=self.KEEP_PROB)

with tf.name_scope("fc8") as scope:
weights = tf.Variable(tf.random_normal([4096, self.NUM_CLASS]))
biases = tf.Variable(tf.random_normal([self.NUM_CLASS]))

# Matrix multiply weights and inputs and add bias
act = tf.nn.xw_plus_b(dp7, weights, biases, name="fc8")
return act

0 条评论

• ### 升级到tensorflow2.0，我整个人都不好了

Tensorflow 2.0发布已经有一段时间了，各种基于新API的教程看上去的确简单易用，一个简单的mnist手写识别只需要下面不到20行代码就OK了，

• ### tensorflow中实现神经网络训练手写数字数据集mnist

基于tensorflow实现一个简单的三层神经网络，并使用它训练mnist数据集，神经网络三层分别为：

• ### 干货 | Tensorflow设计简单分类网络实现猫狗图像分类训练与测试

第一层：32个feature map 5x5卷积、步长为2、最大值池化 局部相应归一化处理（LRN） 第二层：64个feature map 3x3卷积、步长为...

• ### 【TensorFlow】理解 Estimators 和 Datasets

Google 在 2017 年 9 月 12 号的博文 Introduction to TensorFlow Datasets and Estimators 中...

• ### tensorflow入门：Logistic Regression

g(z)=11+e−zg(z) = \frac{1}{1+e^{-z}}g(z)=1+e−z1​

• ### 用 Tensorflow 建立 CNN

稍稍乱入的CNN，本文依然是学习周莫烦视频的笔记。 还有 google 在 udacity 上的 CNN 教程。 CNN(Convolutional Neura...

• ### 实例介绍TensorFlow的输入流水线

在训练模型时，我们首先要处理的就是训练数据的加载与预处理的问题，这里称这个过程为输入流水线（input pipelines，或输入管道，[参考：https://...

对于一个被研究的物体，它有多个属性(x1, x2, ... xn)和一个值y。线性回归假设y与(x1, x2, ... xn)有线性关系，也就是我们可以把y表示...

• ### 基于tensorflow的手写数字分类预测kaggle实战

kaggle网站手写数字分类的比赛链接：https://www.kaggle.com/c/digit-recognizer 注册账号后才能参加kaggle比赛...

• ### tf12: 判断男声女声

本帖训练一个简单的神经网络模型，用来判断声音是男是女。 本帖数据集取自voice-gender项目，这个项目使用了n种分类模型，并比较了准确率，但是它没有使...

### OpenCV学堂

OpenCV开发专家计算机视觉开发