经典的卷积神经网络模型有1998年的LeNet-5模型,2012年的AlexNet模型,2014年的VGG模型,2014年的GoogleNet模型和2015年的ResNet模型。
本文主要讲述经典LeNet-5模型,此模型一共有7层,结构如下图所示:
7层结构分别是:
卷积层-池化层-卷积层-池化层-全连接层-全连接层-全链接输出层
以下是LeNet-5模型的代码,在神经网络代码之上做的修改即可实现,代码如下。。。
此部分为LeNet-5模型中的lenet_inference.py代码部分,把神经网络的结构给改了,加入了卷积层和池化层。
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 10 11:36:35 2017
@author: cxl
"""
import tensorflow as tf
#INPUT_NODE = 784
#OUTPUT_NODE = 10
IMAGE_SIZE = 28
NUM_CHANNELS = 1
NUM_LABELS = 10
CONV1_DEEP = 32
CONV1_SIZE = 5
CONV2_DEEP = 64
CONV2_SIZE = 5
FC_SIZE = 512
def inference(input_tensor,train,regularizer):
with tf.variable_scope('layer1-conv1'):
conv1_weights =tf.get_variable("weight",[CONV1_SIZE,CONV1_SIZE,
NUM_CHANNELS,CONV1_DEEP],
initializer = tf.truncated_normal_initializer(stddev = 0.1))
conv1_biases = tf.get_variable("bias",[CONV1_DEEP],
initializer = tf.constant_initializer(0.0))
conv1 = tf.nn.conv2d(input_tensor,conv1_weights,strides = [1,1,1,1],
padding = "SAME")
relu1=tf.nn.relu(tf.nn.bias_add(conv1,conv1_biases))
with tf.name_scope('layer2-pool1'):
pool1 = tf.nn.max_pool(relu1,ksize = [1,2,2,1],strides=[1,2,2,1],
padding = 'SAME')