- added image module with sub image and normalize
- improved tests
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
from rbm.matrix import Mat, np
|
||||||
|
|
||||||
|
def normalize(image: Mat):
|
||||||
|
image_shape = image.shape
|
||||||
|
mean_training_batch = np.reshape(np.repeat(np.mean(image, axis=1), image_shape[1], axis=0), image_shape)
|
||||||
|
var_training_batch = np.reshape(np.repeat(np.std(image, axis=1), image_shape[1], axis=0), image_shape)
|
||||||
|
result = (image - mean_training_batch) / var_training_batch
|
||||||
|
return result
|
||||||
|
|
||||||
|
class SubImage:
|
||||||
|
def __init__(self, sx: int, sy: int, px: int, py: int):
|
||||||
|
self.sx = sx
|
||||||
|
self.sy = sy
|
||||||
|
self.px = px
|
||||||
|
self.py = py
|
||||||
|
self.x = 0
|
||||||
|
self.y = 0
|
||||||
|
|
||||||
|
def check(self, image: Mat):
|
||||||
|
nx = (image.shape[0] - self.sx)
|
||||||
|
ny = (image.shape[1] - self.sy)
|
||||||
|
if nx % self.px:
|
||||||
|
raise ValueError
|
||||||
|
if ny % self.py:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
nx = int(nx / self.px) + 1
|
||||||
|
ny = int(ny / self.py) + 1
|
||||||
|
return nx, ny
|
||||||
|
|
||||||
|
def __call__(self, images: Mat):
|
||||||
|
return self.process_image(images)
|
||||||
|
|
||||||
|
def process_image(self, image: Mat):
|
||||||
|
nx, ny = self.check(image[0, 0, :, :])
|
||||||
|
result = np.zeros((image.shape[0]*nx*ny, image.shape[1], self.sx, self.sy))
|
||||||
|
k = 0
|
||||||
|
for n in range(image.shape[0]):
|
||||||
|
for x in range(0, image.shape[2] - self.sx + 1, self.px):
|
||||||
|
for y in range(0, image.shape[3] - self.sy + 1, self.py):
|
||||||
|
for c in range(image.shape[1]):
|
||||||
|
si = image[n, c, x:x+self.sx, y:y+self.sy]
|
||||||
|
result[k, c] = si
|
||||||
|
k += 1
|
||||||
|
|
||||||
|
return result
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
from rbm.matrix import Mat, np
|
from rbm.matrix import Mat, np
|
||||||
from rbm.entity import Entity, EntityParams, TrainingParams
|
from rbm.entity import Entity, EntityParams, TrainingParams
|
||||||
from rbm.model import Model
|
from rbm.model import Model
|
||||||
|
from rbm.image import normalize
|
||||||
|
|
||||||
WORK_DIR = "../../results"
|
WORK_DIR = "../../results"
|
||||||
USE_OPTIMIZER = True
|
USE_OPTIMIZER = True
|
||||||
@@ -45,12 +46,10 @@ def linear():
|
|||||||
training_batch = np.random.randn(N_CASES, N_VIS, dtype=np.float64)
|
training_batch = np.random.randn(N_CASES, N_VIS, dtype=np.float64)
|
||||||
|
|
||||||
# Normalize training data
|
# Normalize training data
|
||||||
mean_training_batch = np.reshape(np.repeat(np.mean(training_batch, axis=1), N_VIS, axis=0), training_batch.shape)
|
training_batch_norm = normalize(training_batch)
|
||||||
var_training_batch = np.reshape(np.repeat(np.std(training_batch, axis=1), N_VIS, axis=0), training_batch.shape)
|
|
||||||
training_batch = (training_batch - mean_training_batch) / var_training_batch
|
|
||||||
|
|
||||||
# Train layer
|
# Train layer
|
||||||
model.train(training_batch)
|
model.train(training_batch_norm)
|
||||||
|
|
||||||
# Save weights
|
# Save weights
|
||||||
model.save()
|
model.save()
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
from rbm.image import SubImage
|
||||||
|
from rbm.matrix import np
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
n = 2
|
||||||
|
c = 3
|
||||||
|
w = 8
|
||||||
|
h = 8
|
||||||
|
img = np.reshape(np.linspace(1, n*c*w*h, num=n*c*w*h, dtype=np.float64), (n, c, w, h))
|
||||||
|
# print(img)
|
||||||
|
|
||||||
|
sub = SubImage(4, 4, 1, 1)
|
||||||
|
|
||||||
|
images = sub(img)
|
||||||
|
print(images)
|
||||||
|
|
||||||
|
|
||||||
|
print("Test: [passed]")
|
||||||
Reference in New Issue
Block a user