sparse_softmax_cross_entropy_with_logits()
sparse_softmax_cross_entropy_with_logits(_sentinel=None,
labels=None,
logits=None,
name=None)
- logits
- 神经网络最后一层的输出
- 大小为[ [ batch_size, num_classes]
- labels
- 表示实际标签值
- 大小为[ [ batch_size,num_classes]
- 第一步是先对网络最后一层的输出做一个 softmax ,输出为属于某一属性的概率向量;再将概率向量与实际标签向量做交叉熵,返回向量
用于求含有正则化的损失值
- 对网络最后一层的输出 y 做 softmax,求取输出属于某一类的概率,结果为一个num_classes 大小的向量,再将此向量和实际标签值做交叉熵,返回一个向量值。
ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))
- 通过 tf.reduce_mean()函数对得到的向量求均值,得到 loss
cem = tf.reduce_mean(ce)
loss = cem + tf.add_n(tf.get_collection('losses'))
tf.reduce_mean()
tf.reduce_mean( input_tensor,
reduction_indices=None,
keep_dims=False,
name=None)
- 此函数表示对得到的向量求取均值。参数 r input_tensor 表示 要减少的张量 ;
- reduction_indices
- keep_dims
- 含义为: 如果为 true ,则保留长度为 1 1 的缩小尺寸。e name 表示 操作的名称。
- 例如:
x = tf.constant([[1., 1.], [2., 2.]])
tf.reduce_mean(x) #表示对向量整体求均值 1.5
tf.reduce_mean(x, 0) #表示对向量在列上求均值[1.5, 1.5]
tf.reduce_mean(x, 1) #表示对向量在行上求均值[1., 2.]
tf.train.exponential_decay()
learning_rate = tf.train.exponential_decay(
LEARNING_RATE_BASE,
global_step,
mnist.train.num_examples / BATCH_SIZE,
LEARNING_RATE_DECAY,
staircase=True)
- 实现指数衰减学习率
- LEARNING_RATE_BASE
- LEARNING_RATE_DECAY
- 表示学习率衰减速率。实现指数级的减小学习率,可以让模型在训练的前期快速接近较优解,又可以保证模型在训练后期不会有太大波动
- staircase
- staircase=True 时,为阶梯形衰减,(global_step/decay_steps)则被转化为整数
- staircase=False 时,为曲线形衰减,
- 以此根据 staircase 来选择不同的衰减方式。
- 计算公式为:
decayed_learning_rate=learining_rate*decay_rate^(global_step/decay_steps)
tf.train.GradientDescentOptimizer()
train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_step)
- learning_rate
- 构造一个实现梯度下降算法的优化器,再通过使用 minimize 更新存储要训练的变量的列表来减小 loss。
tf.train.ExponentialMovingAverage()
ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)
ema_op = ema.apply(tf.trainable_variables())
- 实现滑动平均模型
- MOVING_AVERAGE_DECAY
- 此函数维护一个影子变量,影子变量初始值为变量初始值。影子变量值的更新方式如下:
shadow_variable = decay * shadow_variable + (1-decay) * variable。
- shadow_variable 是影子变量
- variable 表示待更新的变量
- decay 为衰减速率。decay 一般设为接近于 1 的数(0.99,0.999),decay 越大模型越稳定。
tf.control_dependencies()
with tf.control_dependencies([train_step, ema_op]):
train_op = tf.no_op(name='train')
- 将train_step和ema_op 两个训练操作都绑定到train_op上
np.reshape()
reshaped_xs = np.reshape(xs,(BATCH_SIZE,
mnist_lenet5_forward.IMAGE_SIZE,
mnist_lenet5_forward.IMAGE_SIZE,
mnist_lenet5_forward.NUM_CHANNELS))
- 读取一个 batch 数据,将输入数据 xs 转成与网络输入相同形状的矩阵。
tf.equal()
tf.equal(x, y)
- 此函数用于判断函数的两个参数 x 与 与y 是否相等
- 一般x 表示预测值,y 表示实际值