在下面的 Torch7 代码中,实现`color_content_masks = deepcopy(color_content_masks)`的意思是什么?

如果进行池化则
   对于1到#color_codes的值,做以下操作
     将color_content_masks [ k ] 的大小缩小到 原先大小 二分之一的上取整
     将color_style_masks [ k ] 的大小缩小到 原先大小 二分之一的上取整
if is_conv 则
   local sap = nn.SpatialAveragePooling(3,3,1,1,1,1):float()
   对于1到#color_codes的值,做以下操作
      color_content_masks [ k ] 进行重复,参数为1,1,1,让它们的尺寸和通道数和 sap 相等,然后传递给sap:forward()函数,取结果序列中的第一个元素,进行克隆,结果保存在color_content_masks [ k ] 中
      color_style_masks [ k ] 的操作过程与color_content_masks [ k ] 的操作过程相同
end
color_content_masks = deepcopy(color_content_masks)
color_style_masks = deepcopy(color_style_masks)

此代码是关于深度照片风格转换的 Torch 项目。 你可以在 https://github.com/luanfujun/deep-photo-styletransfer 上找到完整的代码。 函数 deepcopy() 如下,该代码与 Lua 官方网站推荐的相同。

function deepcopy(orig)
    local orig_type = type(orig)
    local copy
    if orig_type == 'table' then
        copy = {}
        for orig_key, orig_value in next, orig, nil do
            copy[deepcopy(orig_key)] = deepcopy(orig_value)
        end
        setmetatable(copy, deepcopy(getmetatable(orig)))
    else -- number, string, boolean, etc
        copy = orig
    end
    return copy
end

从代码中可以看到,在if语句中,color_content_maskscolor_style_masks被直接修改,那么为什么我们需要实现 deepcopy 函数呢?」

点赞