我正在为tensorflow:学习本教程
它将交叉熵函数的实现描述为:
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))首先,tf.log计算y的每个元素的对数,然后将y_的每个元素与tf.log(y)的对应元素相乘。然后tf.reduce_sum在y的第二维中添加元素,这是因为reduction_indices=1参数。最后,tf.reduce_mean计算批处理中所有示例的平均值。
我的理解是,阅读本教程时,y的实际值和预测值都是2D张量。行是您使用的大小为784的MNIST向量的数目,它表示列。
上面的引语说:“我们将y_的每个元素乘以tf.log(Y)的对应元素”。
我的问题是-我们在这里做传统的矩阵乘法吗,比如,行x列,因为句子表明我们不是?
发布于 2018-07-17 21:27:50
传统的矩阵乘法仅在计算模型hypothesis时使用,如代码中所示,将x乘以W。
y = tf.nn.softmax(tf.matmul(x, W) + b)代码块中的代码y_ * tf.log(y):
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y),
reduction_indices=[1]))执行元素向乘法的original targets => y_与日志的predicted targets => y.
计算交叉熵损失函数的目的是在分类问题中找出观测属于特定类别或组的概率。
正是这种度量(即交叉熵损失)被优化函数最小化,其中梯度下降是寻找W最佳参数集的一个流行例子,可以提高分类器的性能。我们认为损失是最小的,因为损失或误差成本越低,模型就越好。
发布于 2018-07-17 18:18:55
我们在这里按元素进行乘法:y_ * tf.log(y)
https://stackoverflow.com/questions/51387063
复制相似问题