|
|
import math |
|
|
import torch |
|
|
|
|
|
|
|
|
|
|
|
def tensor2log(x): |
|
|
a = (math.e - 1.) / 2. |
|
|
b = (math.e + 1.) / 2. |
|
|
x = a * x + b |
|
|
return torch.log(x).float() |
|
|
|
|
|
|
|
|
def log2tensor(x): |
|
|
a = 2. / (math.e - 1.) |
|
|
b = (math.e + 1.) / (1. - math.e) |
|
|
x = torch.exp(x) |
|
|
x = a * x + b |
|
|
return x.float() |
|
|
|
|
|
|
|
|
|
|
|
def _tensor2log(x): |
|
|
a = math.e - 1. |
|
|
b = 1. |
|
|
x = a * x + b |
|
|
return torch.log(x).float() |
|
|
|
|
|
|
|
|
def _log2tensor(x): |
|
|
a = 1. / (math.e - 1.) |
|
|
b = -a |
|
|
x = torch.exp(x) |
|
|
x = a * x + b |
|
|
return x.float() |
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
inputx = torch.rand(1, 3, 64, 64) |
|
|
print(torch.min(inputx), torch.max(inputx)) |
|
|
|
|
|
out = _tensor2log(inputx) |
|
|
print(torch.min(out), torch.max(out)) |
|
|
|
|
|
out = _log2tensor(out) |
|
|
print(torch.min(out), torch.max(out)) |
|
|
print(torch.mean(out - inputx)) |
|
|
|