我正在学习本教程的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列,因为这句话表明我们不是?
答案 0 :(得分:1)
传统的矩阵乘法仅在计算模型# reshape data
library(dplyr)
library(tidyr)
dd <- tit3d %>% mutate(id=1:n(), sc=Survived) %>%
gather("category", "value", -c(id, Freq, sc))
# draw plot
ggplot(dd, aes(x=category, stratum=value, alluvium = id,
label=value))+
geom_flow(aes(fill=sc)) +
geom_stratum(alpha = .5) + geom_text(stat = "stratum", size = 3) +
theme_minimal()
时使用,如代码所示,将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
的最佳参数集,从而改善了性能。分类器。我们说损失是最小的,因为损失或错误成本越低,模型越好。
答案 1 :(得分:0)
我们在这里进行元素明智的乘法:y_ * tf.log(y)