Download this file

43 lines (33 with data), 1.2 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import random
import numpy as np
class Compose:
def __init__(self, transforms, prob=1.):
self.transforms = [t for t in transforms if t is not None]
self.prob = prob
def __call__(self, **data):
if random.random() < self.prob:
for t in self.transforms:
data = t(**data)
return data
class OneOf:
def __init__(self, transforms, prob=.5):
self.transforms = transforms
self.prob = prob
transforms_probs = [t.prob for t in transforms]
s = sum(transforms_probs)
self.transforms_probs = [t / s for t in transforms_probs]
def __call__(self, **data):
if random.random() < self.prob:
t = np.random.choice(self.transforms, p=self.transforms_probs)
t.prob = 1.
data = t(**data)
return data
class OneOrOther:
def __init__(self, first, second, prob=.5):
self.first = first
first.prob = 1.
self.second = second
second.prob = 1.
self.prob = prob
def __call__(self, **data):
return self.first(**data) if random.random() < self.prob else self.second(**data)