深度学习:MNIT数字识别问题

本文介绍了使用TensorFlow训练MNIST数字识别问题的过程,包括数据处理、网络构建、训练策略及优化方法。讨论了学习率衰减、滑动平均模型在提高模型稳定性和测试准确性上的作用,最终在30000次训练步骤后,测试准确率达到0.8908。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的动态

TypeError: The variables must be half, float, or double: Variable_14:0
重启了下kernel好了
????
T T
找了一早晨bug

函数

处理mnist数据的类

  • mnist = input_data.read_data_sets()
  • mnist.validation.num_examples:size
  • mnist.train.next_batch(batch_size):训练batch

变量

  • x = tf.placeholder(tf.float32, [None, INPUT_NODE], name = “x-input”):插入一个张量的占位符,这个张量将一直被提供.
  • tf.truncated_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None):从截断的正态分布中输出随机值,返回指定形状的张量填充随机截断的正常值.
  • constant ( value , dtype = None , shape = None , name = ‘Const’ , verify_shape = False):创建一个常数张量.
  • tf.global_variables_initializer()添加节点用于初始化所有的变量(GraphKeys.VARIABLES)。返回一个初始化所有全局变量的操作(Op)。在你构建完整个模型并在会话中加载模型后,运行这个节点

训练

  • tf.nn.relu()
  • tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)
  • tf.cast(x, dtype, name=None):x/x.value转换为dtype
  • tf.train.exponential_decay(
    0.01, # Base learning rate.
    batch * BATCH_SIZE, # Current index into the dataset.
    train_size, # Decay step.
    0.95, # Decay rate.
    staircase=True)

实现滑动平均模型
1、定义训练轮数step
2、然后定义滑动平均的类
3、给这个类指定需要用到滑动平均模型的变量(w和b)
4、执行操作,把变量变为指数加权平均值

 # 1、定义训练的轮数,需要用trainable=False参数指定不训练这个变量,
    # 避免这个变量被计算滑动平均值
    global_step = tf.Variable(0, trainable=False)

    # 2、给定滑动衰减率和训练轮数,初始化滑动平均类
    # 定训练轮数的变量可以加快训练前期的迭代速度
    variable_averages = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,
                                                          global_step)
    # 3、用tf.trainable_variable()获取所有可以训练的变量列表,也就是所有的w和b
    # 全部指定为使用滑动平均模型
    variables_averages_op = variable_averages.apply(tf.trainable_variables())

    # 反向传播更新参数之后,再更新每一个参数的滑动平均值,用下面的代码可以一次完成这两个操作
    with tf.control_dependencies([train_step, variables_averages_op]):
        train_op = tf.no_op(name="train")

MNIST数据

  • 60000 训练数据
  • 10000 测试数据
  • 28*28

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("./", one_hot=True)

自动生成:

  • train
  • validation
  • test

TensorFlow训练神经网络

# 设置相关常数

INPUT_NODE = 784
OUTPUT_NODE = 10

# 配置神经网络参数
LAYER_NODE = 500
BATCH_SIZE = 100
LEARNING_RATE_BASE = 0.8#基础的学习率
LEARNING_RATE_DECAY = 0.99#学习率的衰减率
REGULARIZATION_RATE = 0.001#描述模型复杂度的正则化项在损失函数中的系数
TRAINING_STEPS = 30000#训练轮数
MOVING_AVERAGE_DECAY = 0.99#平均衰减率

学习率:反向传播算法步长;学习率大:学习速度快,但是易损失值爆炸&易振荡;小:学习速度慢,易过拟合&收敛速度慢。一般根据训练轮数设置动态变化的学习率,以0.01~0.001为宜
学习率的衰减率:在模型训练初期,会使用较大的学习率进行模型优化,随着迭代次数增加,学习率会逐渐进行减小,保证模型在训练后期不会有太大的波动,从而更加接近最优解。计算公式: d e c a y e d l e a r n i n g r a t e = l e a r n i n g r a t e ∗ d e c a y r a t e ( g l o b a l s t e p / d e c a y s t e p s ) decayed_learning_rate = learning_rate *decay_rate ^{(global_step / decay_steps)} decayedlearnin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值