Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. class HyperPlaneDataset(torch.utils.data.Dataset):
  2.  
  3. # Warning: read using mutable obects for default input arguments in python.
  4. def __init__(
  5. self,
  6. space_range=[
  7. -0.75, # Start
  8. 0.75, # end
  9. ], # ND hypercube
  10. intercept_range=[-0.5, 0.5],
  11. normal_offset=[1, 0],
  12. space_offset=[-2, 2],
  13. max_normal_angle_degree=180,
  14. dataset_size=1000,
  15. noise_density=100,
  16. pattern_density=100,
  17. quantization_size=0.01,
  18. random_seed=0,
  19. dimension=2):
  20.  
  21. assert len(normal_offset) == dimension
  22.  
  23. self.max_normal_angle_degree = max_normal_angle_degree
  24. self.intercept_slope = intercept_range[1] - intercept_range[0]
  25. self.intercept_bias = intercept_range[0]
  26. self.normal_offset = normal_offset
  27.  
  28. self.space_min = space_range[0]
  29. self.space_max = space_range[1]
  30. self.space_length = self.space_max - self.space_min
  31. self.space_offset_min = space_offset[0]
  32. self.space_offset_max = space_offset[1]
  33.  
  34. self.dataset_size = dataset_size
  35. self.random_seed = random_seed
  36. self.rng = np.random.RandomState(random_seed)
  37.  
  38. self.noise_density = noise_density
  39. self.pattern_density = pattern_density
  40.  
  41. self.quantization_size = quantization_size
  42. self.dimension = dimension
  43.  
  44.  
  45. class HyperLineDataset(HyperPlaneDataset):
  46.  
  47. def __getitem__(self, i):
  48. # Regardless of the input index, return randomized data
  49. normal = self.rng.rand(self.dimension) - 0.5 + self.normal_offset
  50. normal /= np.sqrt((normal**2).sum())
  51. intercept = self.intercept_slope * self.rng.rand(
  52. self.dimension) + self.intercept_bias
  53.  
  54. # Sample points on uniformly on space_range
  55. n_line = int(
  56. np.floor(self.pattern_density * np.sqrt(self.dimension) * self.space_length))
  57. X_line = self.space_length * (self.rng.rand(n_line, 1) -
  58. 0.5) * normal[None, :] + intercept
  59.  
  60. n_noise = int(np.floor(self.noise_density * (self.space_length**self.dimension)))
  61. X_noise = self.space_length * self.rng.rand(
  62. n_noise, self.dimension) + self.space_min + 0.1 * self.space_length * self.rng.randn(
  63. n_noise, self.dimension)
  64.  
  65. space_offset = self.rng.rand(self.dimension) * (
  66. self.space_offset_max - self.space_offset_min) + self.space_offset_min
  67.  
  68. # Concatenate data
  69. input = np.vstack((X_line, X_noise)) + space_offset[None, :]
  70. label = np.vstack([np.ones((len(X_line), 1)), np.zeros((len(X_noise), 1))])
  71.  
  72. # Discretize
  73. discrete_coords = np.floor(input / self.quantization_size)
  74. keys = ME.utils.ravel_hash_vec(discrete_coords.copy())
  75. _, inds, counts = np.unique(keys, return_index=True, return_counts=True)
  76. return discrete_coords[inds], input[inds], counts[:, None], label[
  77. inds], normal, intercept
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement