Theano逻辑回归理解代码

数据挖掘 Python 西阿诺
2022-02-17 21:00:07

我习惯了 C/Java 之类的编程,有时我对理解 Python 表示法感到头疼。

在网上提供的逻辑回归代码上,我试图理解这行代码:

-T.mean(T.log(self.p_y_given_x)[T.arange(y.shape[0]), y])

基本上是说执行这个平均值: J(θ)=[i=1bk=1K1{y(i)=k}logexp(θ(k)x(i))j=1Kexp(θ(j)x(i))]在哪里b是批量大小。

那么它与theano代码有关,还是只是python符号?我对这段代码很感兴趣:

T.log(self.p_y_given_x)[T.arange(y.shape[0]), y]

如果可以请给我一些解释。

1个回答

我同意代码乍一看可能很难阅读,但我发现评论很清楚:

  • y.shape[0]是(象征性地) 中的行数y,即n小批量中的示例数(调用它)
  • T.arange(y.shape[0])是一个符号向量,它将包含[0,1,2,... n-1]
  • T.log(self.p_y_given_x)是一个对数概率矩阵(称为它LP),每个示例一行,每个类一列
  • LP[T.arange(y.shape[0]),y]是一个向量 v 包含[LP[0,y[0]], LP[1,y[1]], LP[2,y[2]], ..., LP[n-1,y[n-1]]]
  • T.mean(LP[T.arange(y.shape[0]),y])是 v 中元素的平均值(跨 minibatch 示例),即跨 minibatch 的平均对数似然。

一切都是 Python 表示法(但有时使用 Theano 函数)。