深度学习中一些常用的函数使用(持续更新中)

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)
  • 添加正则化中的 losses 值到 loss 中
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 表示实际值
发布了89 篇原创文章 · 获赞 36 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40234695/article/details/88671413