【发布时间】:2019-07-22 00:46:12
【问题描述】:
我倾向于看到在查看单个行时不清楚您在计算中的位置的代码。例如:
def forward(self, X):
X = layer(X)
X = activation(X)
X = layer(X)
X = activation(X)
return X
显然,第 2 行和第 4 行以及第 3 行和第 5 行彼此无法区分。
我更愿意编写更具可读性的代码,在查看特定代码行时,您在计算中所处的位置很清楚。例如(使用 Andrew Ng 的符号):
def forward(self, X):
A0 = X
Z1 = layer(A0)
A1 = activation(Z1)
Z2 = layer(A1)
A2 = activation(Z2)
return A2
但这可能会在给定大变量的情况下导致内存错误,因此可能需要执行以下操作...
def forward(self, X):
A0 = X
Z1 = layer(A0); del A0
A1 = activation(Z1); del Z1
Z2 = layer(A1); del A1
A2 = activation(Z2); del Z2
return A2
但是,这会影响可读性并没有利用垃圾收集器的属性。我不确定这个替代方案是否会有所作为。
如果 A0、Z1、A1、Z2、A2 的大小都相同,那么理想的解决方案就是最多只占用内存中两个变量的大小。
有没有一种pythonic的方法可以在计算左侧之后删除右侧使用的所有变量,或者有一些类似的效果?或者,您是否可以创建一个执行删除和分配的函数(鉴于范围限制)以及那里的效率权衡是什么?
【问题讨论】:
-
这可能会有所帮助。 stackoverflow.com/questions/26545051/…
-
假设
A0的内容仍然被layer()中的任何函数引用,那么好的变量名的唯一额外成本是对对象的本地引用。坚持可读的代码,如果你真的有问题,只担心额外的复杂性。
标签: python python-3.x neural-network deep-learning