LeNet-5 模型给我的初体验非常不好,目前为止还没有实际的感觉到卷积的优点,或者是LeNET-5的优点,以下是完整训练代码:卷积层-池化层-卷积层-池化层-全连接-全连接
这里有个问题:学到现在我并不觉得深度学习的合理性很好,大部分观点都是基于日常生活经验就是猜罢了(或许日后会为今天的言论感到惭愧,但我从传统机器学习理论结束之后就觉得因果关系是未来)
代码如下:【来自实战google深度学习框架】
import tensorflow as tf
# 配置神经网络的参数
input_node = 784
output_node = 10
layer1_node = 500
IMAGE_SHAPE = 28
NUM_CHANELS = 1
NUM_LABELS = 10
# 配置卷积层的尺寸和参数
CONV1_DEEP = 32
CONV1_SIZE = 5
CONV2_DEEP = 64
CONV2_SIZE = 5
# 全连接层的输出节点个数
FC_SIZE = 512
# 最后全连接层的参数【节点个数】
FC_SIZE = 512
def get_weight_variable(shape,regularizer):
weights = tf.get_variable('weights',shape,initializer = tf.truncated_normal_initializer(stddev=0.1))
if regularizer != None:
tf.add_to_collection('losses',regularizer(weights))
return weights
#定义神经网络前向传播的过程
def inference(input_tensor,train,regularizer):
# 声明第一层卷积层
with tf.variable_scope('layer1_conv1'):
conv1_weights = tf.get_variable('weight',[CONV1_SIZE,CONV1_SIZE,NUM_CHANELS,CONV1_DEEP],
initializer=tf.truncated_normal_initializer(stddev = 0.1))
conv1_biases = tf.get_variable(
'bias',[CONV1_DEEP],initializer=tf.constant_initializer(0.0))
#使用边长为5,深度为32的过滤器,步幅为1,使用相同卷积:全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.variable_scope('layer2_pool1'):
# 采用最大池化,过滤器边长为2,步幅为2,全0填充
pool1 = tf.nn.max_pool(