损失函数

神经网络模型的效果以及优化的目标是通过损失函数loss function来定义的。

监督学习的两个种类:分类问题和回归问题。

  • 分类问题

    分类问题希望解决的是将不同的样本分到事先定义好的类别中。通过神经网络解决多分类问题最常用的方法是设置n个输出节点,其中n为类别的个数。对于每一个样例,神经网络可以得到的一个n维数组作为输出结果。数组中的每一个维度对应一个类别。

    交叉熵cross entropy刻画了两个概率分布之间的距离,是分类问题中使用比较广的一种损失函数。然而神经网络的输出却不一定是一个概率分布,Softmax回归可以将神经网络的输出变成一个概率分布,只是一层额外的处理层。

cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
  • tf.clip_by_value函数可以将一个张量中的数值限制在一个范围之内

  • tf.log函数对张量中所有元素依次求对数

  • tf.reduce_mean函数用于计算张量沿着指定的数轴上的的平均值

    因为交叉熵一般会与softmax回归一起使用,所以TensorFlow对这两个功能进行了统一封装,并提供了tf.nn.softmax_cross_entropy_with_logits函数。在只有一个正确答案的分类问题中,TensorFlow提供了tf.nn.sparse_softmax_cross_entropy_with_logits函数来进一步加速计算过程。

# y代表了原始神经网络的输出结果,而y_给出了标准答案。
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)
  • 回归问题

    回归问题解决的是对具体数值的预测。对于回归问题,最常用的损失函数是均方误差MSE(mean squared error)。

# y代表了神经网络的输出答案,y_代表了标准答案。
mse = tf.reduce_mean(tf.square(y_-y))

TensorFlow不仅支持经典的损失函数,还可以优化任意的自定义损失函数

loss = tf.reduce_sum(tf.where(tf.greater(v1, v2), (v1-v2)*a, (v2-v1)*b))

tf.greater函数会比较两个输入张量中每一个元素的大小并返回比较结果。tf.where函数有三个参数,第一个为选择条件依据,当选择条件为True时函数会选择第二个参数中的值,否则使用第三个参数中的值。注意:tf.where函数判断和选择都是在元素级别进行的。

(最近更新:2019年04月13日)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值