我不明白我们是否正在迭代y,因为看起来y中的值正在做什么?他们是T.log的一部分吗?他们是否添加了多个,idk以某种方式与p_y_given_x结合?
result = -T.mean(T.log(p_y_given_x)[T.arange(y1.shape[0]), y1])
print ("result1", result.eval())
print("_________________________")
print("y ", y2)
print("y.shape[0] ", y2.shape[0])
temp = (y2.shape[0], y2)
print("y.shape[0], y", temp)
temp2 = [T.arange(2), y2]
print("T.arange(y rows)", T.arange(2).eval())
print("[t.arange(2), y] [[0, 1], [1, 2]]")
print("T.log(p_y_given_x) ", (T.log(p_y_given_x)).eval())
print(-T.mean(T.log(p_y_given_x)).eval())
print("#########################")
result1 1.022485096286888
_________________________
y <TensorType(int64, matrix)>
y.shape[0] Subtensor{int64}.0
y.shape[0], y (Subtensor{int64}.0, <TensorType(int64, matrix)>)
T.arange(y rows) [0 1]
[t.arange(2), y] [[0, 1], [1, 2]]
T.log(p_y_given_x) [[-1.11190143 -0.91190143 -1.31190143]
[-1.13306876 -1.03306876 -1.13306876]]
1.10581842962
#########################
答案 0 :(得分:1)
我没有足够的声誉来发表评论,所以我会将其作为答案发布。
从here
逐字引用y.shape[0] is (symbolically) the number of rows in y, i.e.,
number of examples (call it n) in the minibatch
T.arange(y.shape[0]) is a symbolic vector which will contain
[0,1,2,... n-1] T.log(self.p_y_given_x) is a matrix of
Log-Probabilities (call it LP) with one row per example and
one column per class LP[T.arange(y.shape[0]),y] is a vector
v containing [LP[0,y[0]], LP[1,y[1]], LP[2,y[2]], ...,
LP[n-1,y[n-1]]] and T.mean(LP[T.arange(y.shape[0]),y]) is
the mean (across minibatch examples) of the elements in v,
i.e., the mean log-likelihood across the minibatch.
y中的值是minibatch中示例的标签。例如,让三个示例的小批量将y
(标签)向量作为[0,6,9]
(考虑手写数字示例)。
因此,[LP[0,y[0]], LP[1,y[1]], LP[2,y[2]], ...,LP[n-1,y[n-1]]]
将是LP[1,0], L[2,6], LP[3,9]
现在,为什么我们对这些数字感兴趣?
这是因为您需要此数字来计算可能性,该可能性定义为小批量中示例的日志概率的平均值。例如,LP[1,0]
包含第一个示例属于类0的对数概率。您希望此数字尽可能高,因为这是事实。然后取平均值来找出这些数字的平均值。负面的迹象是因为损失是可能性的负面因素。这有帮助吗?