MNIST数字识别问题
我的动态
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