如何解释softmax函数的成本计算

时间:2018-08-09 06:41:41

标签: neural-network ipython softmax

在神经网络的最后一层使用softmax激活函数时,我正在努力解释/使用log_likelihood计算。我正在以向量化的方式工作。我想识别0到9之间的标签!

log_likelihood = -np.log(p[range(m),(Y)])
cost = np.sum(log_likelihood) / m

比方说,p = 10(类)x 103(示例)矩阵

m是示例总数(103)

Y应该是我猜的标签向量(不是一个热向量)= 1 x 103 因此,如果我想识别0到9之间的数字,Y就像(1 3 8 7 0 ... 4 1 2 9)

那么如何计算log_likelihood?有人可以举例说明吗? 我在[range(m),(Y)]部分中苦苦挣扎,我不知道每个提示使用哪个索引。 因为Y =(1 3 8 7 0 ... 4 1 2 9)而不仅仅是1或3或8等...

1 个答案:

答案 0 :(得分:0)

由于我没有您的实际实现,因此我将假设log_likelihood = -np.log(p[range(m),(Y)]是正确的格式。 在这种情况下,行数为m,即103,列数将为10,每行表示softmax输出以及每个输入示例的概率。

使用range(m),您可以在m行中“循环”。 (在矢量化实现中并非完全循环。)

将列索引提到为(Y),您仅从softmax输出(每行)中获取概率值,该值指示模型对所需数字的结果。

例如,如果您希望模型检测到一个3的数字,则仅检查模型如何对softmax输出进行处理,该输出应该在表示值3的索引上具有较高的概率值。您可以看一下示例下面的内容用于直观了解:

Y = (0,1,2)
y = [[1,2,3,4,5],[1,2,34,5,6],[1,2,0,4,5]]
print(np.array(y)[range(3),(Y)])
#-----------------------------------------
output: [1 2 0]

您将在log_likelihood中得到一个向量,该向量表示应以高概率预测的softmax单位的对数似然成本。