I’m unsure why this approach should save memory, since it seems you are appending all outputs and I guess you are then stacking them to the original output and try to calculate the gradients?
If so, then I think the output tensors as well as all intermediate activation tensors would still be calculated the there should not be any memory saving.
If you want to lower the memory usage, you could try to calculate the gradients for each crop, and accumulate the gradients for all patches of the original input.
After each backward call, the intermediate activations would be freed and you might be able to reduce the memory usage using this approach.