The question says it all. I want to get a 2-D torch.Tensor
with size [a,b]
filled with values from a uniform distribution (in range [r1,r2]
See this for all distributions: https://pytorch.org/docs/stable/distributions.html#torch.distributions.uniform.Uniform
This is the way I found works:
# generating uniform variables
import numpy as np
num_samples = 3
Din = 1
lb, ub = -1, 1
xn = np.random.uniform(low=lb, high=ub, size=(num_samples,Din))
print(xn)
import torch
sampler = torch.distributions.Uniform(low=lb, high=ub)
r = sampler.sample((num_samples,Din))
print(r)
r2 = torch.torch.distributions.Uniform(low=lb, high=ub).sample((num_samples,Din))
print(r2)
# process input
f = nn.Sequential(OrderedDict([
('f1', nn.Linear(Din,Dout)),
('out', nn.SELU())
]))
Y = f(r2)
print(Y)
but I have to admit I don't know what the point of generating sampler is and why not just call it directly as I do in the one liner (last line of code).
Comments:
Reference:
For those who are frustratingly bashing their keyboard yelling "why isn't this working." as I was... note the underscore behind the word uniform.
torch.FloatTensor(a, b).uniform_(r1, r2)
^ here
torch.FloatTensor(a, b).uniform_(r1, r2)
Please Can you try something like:
import torch as pt
pt.empty(2,3).uniform_(5,10).type(pt.FloatTensor)
Utilize the torch.distributions
package to generate samples from different distributions.
For example to sample a 2d PyTorch tensor of size [a,b]
from a uniform distribution of range(low, high)
try the following sample code
import torch
a,b = 2,3 #dimension of the pytorch tensor to be generated
low,high = 0,1 #range of uniform distribution
x = torch.distributions.uniform.Uniform(low,high).sample([a,b])
This answer uses NumPy to first produce a random matrix and then converts the matrix to a PyTorch tensor. I find the NumPy API to be easier to understand.
import numpy as np
torch.from_numpy(np.random.uniform(low=r1, high=r2, size=(a, b)))