python - 理解 Keras 模型中的 Python 变量赋值
问题描述
我知道 python 中的变量赋值与 C 或 C++ 中的不同。这篇文章展示了如何一次创建乘法变量。但是,它们都指向同一个对象。今天我研究了一些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 层的两个分支传递。因此最终会有两次损失。现在到实际的问题。
在中间,作者创建了变量 res_out 并将 x 分配给它。这应该是分支(据我所知)。他继续与 x 合作。在“# for value output”处,他开始使用 res_out 的分支。显然,假定 res_out 是分支点处旧 x 的副本。否则实际上不需要这个变量。
但是 res_out 不是和 x 指向同一个对象吗?这意味着实际上存在已知分支,只是一个额外的 CNN 块。python中是否有不同的任务,有时是深拷贝,有时是浅拷贝?
解决方案
推荐阅读
- reactjs - 如何在 React Native 中间歇性地渲染屏幕(使用 Expo)
- game-engine - 无需编码的最佳游戏引擎
- c# - 如何正确更新文本文件中的信息?
- cryptography - 不同的椭圆曲线可以相互通信/加密吗?(例如 prime256v1 和 prime521v1)
- docker - 如何同时启动 Zookeper 和 Kafka?
- excel - Excel VBA - 将特定格式的数据粘贴到另一个工作表
- ruby - 如何在不使用While的情况下删除左侧重复的字符串?
- java - 类级swagger ui上的路径参数
- python - 意外的 Python 类变量
- master-theorem - 为什么分支因子(a)不等于大小(b)?