这是我无法获得的功能:
def group_regularization(v):
const_coeff = lambda W: tf.sqrt(tf.cast(W.get_shape().as_list()[1], tf.float32))
return tf.reduce_sum([tf.multiply(const_coeff(W), l21_norm(W)) for W in v if 'bias' not in W.name])
最后一行是什么意思?
起初我认为它是"将功能应用于W
,但名称为bias
"的功能除外,但我不确定。
答案 0 :(得分:3)
这是一个带有条件的list comprehension。它与Tensorflow无关,它只是基本的Python。
条件列表推导采用
形式[<expression> for <name> in <list> if <condition>]
这会迭代<list>
为<condition>
为真的<name>
中的所有元素,依次将每个元素分配给<expression>
,评估new_list = []
for <name> in <list>:
if <condition>:
new_list.append(<expression>)
,并创建新的结果列表。它相当于
<Button x:Name="CreatNewCustomer"
HorizontalAlignment="Stretch"
Content="New Customer"
VerticalAlignment="Stretch"
Height="45"
Background="#FF007ACC"
Width="auto"
Foreground="#FFCDCDCD"
Margin="5">
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Click">
<core:ChangePropertyAction TargetObject="NewCustomerBlade"
PropertyName="IsOpen"
Value="True" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</Button>
除了列表理解是更清晰的代码并且运行起来可能更快。
答案 1 :(得分:1)
它表示列表理解扩展如下:
out_list = []
def group_regularization(v):
...
for W in v:
if 'bias' not in W.name:
out_list.append(tf.multiply(const_coeff(W), l21_norm(W)))
tf.reduce_sum(out_list)
它正在遍历v
group_regularization
中的每个项目
然后,检查字符串'bias'是否不在W.name
中然后,为tensorflow做(无论如何)操作。
答案 2 :(得分:0)
让我们分解它,它在python中的约定:
#Step 1:
for W in v
# Will foreach loop W for every item in v
#Step 2:
if 'bias' not in W.name #
# in loop, check if 'bias' was an element of list W.name, if yes, dont do anything with that, if not, do next
#Step 3:
const_coeff(W), l21_norm(W))
# calculate these 2
#Step 4:
tf.multiply(const_coeff(W), l21_norm(W)))
# put those calculated in step 3 into tf.multiply
#Step 5:
[tf.multiply(....)]
# put everything in a list (since you have a loop at step 1)
#Step 6:
tf.reduct_sum([...])
# calculate reduce_sum
#Step 7:
return ....
# pass that result out
答案 3 :(得分:0)
是的,列表理解带有条件。列表推导可以有多种条件。
具有if
条件的列表推导的一般格式是这个,
[<expression> for <value> in <iterable> if <condition>]
你也可以在理解中拥有if..else
[<expression> if <condition> else <expression> for <value> in <iterable> ]
注意:您的iterable可以是list,tuple,set,string,...etc
为了清楚起见,请考虑这个简单的例子,
>>> v = [1,2,3,4]
>>> v
[1, 2, 3, 4]
假设这是您给定代码中的v
,也是出于理解目的,我们说Wname
类似于W.name
>>> Wname = [1,2]
>>> Wname
[1, 2]
现在突然你决定我想要一个列表x,其中包含来自v但不是Wname 的项目。嗯......怎么办?看看下面。
>>> x = [W for W in v if W not in Wname]
>>> x
[3, 4]
在上面提到的代码中,正是这些方面发生了什么。