спасибо за Ваш ответ. Я должен признать, что это не очень хороший вопрос, и он будет закрыт. в любом случае, глубокая копия здесь на самом деле очень нужна, так как нам нужно наследовать settable после того, как color_content_masks перейдет в сеть.
if is_pooling then
for k = 1, #color_codes do
color_content_masks[k] = image.scale(color_content_masks[k], math.ceil(color_content_masks[k]:size(2)/2), math.ceil(color_content_masks[k]:size(1)/2))
color_style_masks[k] = image.scale(color_style_masks[k], math.ceil(color_style_masks[k]:size(2)/2), math.ceil(color_style_masks[k]:size(1)/2))
end
elseif is_conv then
local sap = nn.SpatialAveragePooling(3,3,1,1,1,1):float()
for k = 1, #color_codes do
color_content_masks[k] = sap:forward(color_content_masks[k]:repeatTensor(1,1,1))[1]:clone()
color_style_masks[k] = sap:forward(color_style_masks[k]:repeatTensor(1,1,1))[1]:clone()
end
end
color_content_masks = deepcopy(color_content_masks)
color_style_masks = deepcopy(color_style_masks)
ыше - это факельный проект о передаче глубокого фото-стиля. Вы можете найти код в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_masks
а такжеcolor_style_masks
это изменение напрямую, так почему мы должны реализовать глубокую копию?