神经网络模型的效果和优化的目标是通过损失函数(loss function)来定义的。
如何判断一个输出向量和期望向量有多接近呢?交叉熵(cross entropy)是常用的评判方法之一。交叉熵刻画了两个概率分布之间的距离,是分类问题中使用比较广泛的一种损失函数。
通过q来表示p的交叉熵为:
交叉熵刻画的是两个概率之间的距离,但是神经网络的输出并不一定是一个概率分布。
如何将神经网络前向传播得到的结果也变成概率分布呢?Softmax回归是一个非常常用的方法。
在tf中,softmax将神经网络的输出变成一个概率分布。
从交叉熵的公式中可以看出交叉熵函数不是对称的(H(p,q)≠H(q,p)),他刻画的是通过概率分布q来表达概率分布p的困难程度。当交叉熵作为神经网络的损失函数时,p代表的是正确答案,q代表的是预测值。交叉熵越小,两个概率分布越接近。
tf.reduce_mean(input_tensor,axis=None,keepdims=None,name=None,reduction_indices=None,keep_dims=None)
axis=None,不写的时候默认求取整体的平均值
>>> v=tf.constant([[1.0,2.0,3.0],[4.0,5.0,6.0]])
>>> tf.reduce_mean(v).eval()
axis=0,按列求取平均值
>>> v=tf.constant([[1.0,2.0,3.0],[4.0,5.0,6.0]])
>>> tf.reduce_mean(v,0).eval()
array([2.5, 3.5, 4.5], dtype=float32)
axis=1,按行求取平均值
>>> v=tf.constant([[1.0,2.0,3.0],[4.0,5.0,6.0]])
>>> tf.reduce_mean(v,1).eval()
array([2., 5.], dtype=float32)
对于回归问题,最常用的损失函数是均方误差MSE(mean squared error),它的定义如下:
其中yi为一个batch中第i个数据的正确答案,而yi’为神经网络给出的预测值。
mse=tf.reduce_mean(tf.square(y_-y))
这里的“-”法也是两个矩阵中对应元素的减法,同“*”