在神经网络的最后一层使用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等...
答案 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单位的对数似然成本。