CNN学习日志

本文记录了作者在学习LeNet-5模型时的体验,对深度学习合理性的疑惑,以及通过调整CNN参数在MNIST数据集上的实验过程。初始设置为卷积-池化-卷积-池化-全连接-全连接,训练效果不佳。作者随后调整了卷积层的深度和尺寸,降低了学习率,经过3k轮迭代后取得良好效果。
摘要由CSDN通过智能技术生成

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(
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值