您的位置:首页 > 其它

tensorflow框架基础之损失函数

2017-05-27 23:48 211 查看

激活函数

激活函数去线性化

常见的激活函数有
sigmoid()
tanh()
ReLU,关于激活函数的一些作用参考activation function

在tensorflow中,实现上述函数的代码:

tf.nn.sigmoid()
tf.nn.tanh()
tf.nn.relu()


传统损失函数

监督学习的两大类

分类问题:将不同的样本划分到已知的类别当中

多分类中,神经网络对每个样本产生一个n维数组作为输出结果,代表每个样本属于各类别的可能性。当然,如果是one-hot coding,那么输出应该只有所属类别的维度值是1,在其余类别的维度是0.

如何判断输出
y
与真实值
y_truth
有多接近?

常用方法:
交叉熵cross_entropy
,它描述了两个概率分布之间的距离,当交叉熵越小说明二者之间越接近

交叉熵定义,概率q表示概率p的交叉熵为:H(p,q)=−∑p(x)logq(x)(1)

cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))

# y_:真实值,y:原始输出
# tf.reduce.mean函数求解平均数
# tf.clip_by_value函数将一个张量的数值限制在一个范围内,上面代码将 q 的值限制在(1e-10, 1.0)之间


但是,网络的输出不一定是概率分布,因此需要将网络前向传播的结果转换成概率分布。常用方法是
Softmax回归
.tensorflow中,
Softmax回归
只作为一层额外的处理层,进行概率分布的转换。转换公式:

softmax(yi)=y′i=eyi∑nj=1eyj(2)

式中原始的网络输出是yi,y′i是转换后的概率分布。注意的是公式(1)并不是对称的,也即是(H(p,q))≠H(q,p),公式(1)描述的是概率q表达概率p的困难程度。因此在神经网络的损失函数中,q代表预测值,p代表真实值。
tensorflow
cross_entropy
softmax
统一封装实现了
softmax
后的
cross_entropy
损失函数

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(y, y_)


回归问题:对具体数值的预测

如房价预测、销量预测等问题需要预测的是一个任意实数,其网络输出只有一个节点,也即是预测值。

常用的损失函数:均方误差(MSE, mean squared error)

MSE(y,y′)=∑ni=1(yi−y′i)2n(3)

其中batch中的第i个输入的正确值记作yi,其预测值记作y′i

mse = tf.reduce.mean(tf.squared(y_ - y))
# y_:正确值,y:预测值


自定义损失函数

自定义的损失函数通常更加符合所应用的场景,如在销量预测中,我们对预测值与正确值之间的大小关系作为损失调整的条件,那么得到类似下面的式子:

loss(y,y′)=∑i=1nf(yi,y′i), f(x,y)={a(x−y)b(x−y)x>yx≤y(4)

在tensorflow中实现

loss = tf.reduce.sum(tf.select(tf.greater(v1, v2), a*(v1-v2), b*(v1-v2)))


# a>b时,m=True,否则m=False
m = tf.greater(a, b)

# m=True时,执行func1;m=False时,执行func2
tf.select(m, func1, func2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: