理解Keras mod中的Python变量赋值

2024-04-16 10:57:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道Python中的变量赋值与C或C++中的变量不一样。这个post显示了如何一次创建乘法变量。但是,它们都指向同一个对象。今天我学习了一些GitHub代码,发现了以下几点:

    in_x = x = Input((2, 6, 7))  # [own(8x8), enemy(8x8)]

    # (batch, channels, height, width)
    x = Conv2D(filters=mc.cnn_filter_num, kernel_size=mc.cnn_filter_size, padding="same",
               data_format="channels_first", kernel_regularizer=l2(mc.l2_reg))(x)
    x = BatchNormalization(axis=1)(x)
    x = Activation("relu")(x)

    for _ in range(mc.res_layer_num):
        x = self._build_residual_block(x)

    res_out = x
    # for policy output
    x = Conv2D(filters=2, kernel_size=1, data_format="channels_first", kernel_regularizer=l2(mc.l2_reg))(res_out)
    x = BatchNormalization(axis=1)(x)
    x = Activation("relu")(x)
    x = Flatten()(x)
    # no output for 'pass'
    policy_out = Dense(self.config.n_labels, kernel_regularizer=l2(mc.l2_reg), activation="softmax", name="policy_out")(x)

    # for value output
    x = Conv2D(filters=1, kernel_size=1, data_format="channels_first", kernel_regularizer=l2(mc.l2_reg))(res_out)
    x = BatchNormalization(axis=1)(x)
    x = Activation("relu")(x)
    x = Flatten()(x)
    x = Dense(mc.value_fc_size, kernel_regularizer=l2(mc.l2_reg), activation="relu")(x)
    value_out = Dense(1, kernel_regularizer=l2(mc.l2_reg), activation="tanh", name="value_out")(x)

这是一个深度学习问题的Keras模型。背景并不重要。大致工作原理如下。输入x通过带有CNN层的两个分支。因此,最终将有两个损失。现在进入实际问题

在中间,作者创建变量RESIOUT并将X赋值给它。这应该是分支机构(据我所知)。他继续与x合作。在“#用于值输出”处,他开始分支与res#out一起工作。 显然,假设res_out是分支点处旧x的副本。否则就不需要这个变量了

但是res_指向的对象不是x吗?这意味着实际上有一个knowbranch,只是一个额外的CNN块。python中是否有不同的赋值,有时是深层的,有时是浅层的


Tags: forsizevalueresregmcoutkernel