Skip to content

Commit

Permalink
add test-full-test-func un rbmTest.py
Browse files Browse the repository at this point in the history
add matrixImage
add regulariaztion
add clocks control
  • Loading branch information
gavr authored and gavr committed Mar 29, 2013
1 parent 8cde066 commit dd8a6a4
Show file tree
Hide file tree
Showing 7 changed files with 388 additions and 119 deletions.
226 changes: 152 additions & 74 deletions .idea/workspace.xml

Large diffs are not rendered by default.

57 changes: 36 additions & 21 deletions rbm/RBM_test_clocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,45 +6,51 @@
from tictoc import tic, toc

imageSize = 30
setCurrentDirectory('25_3_13_rbm_test_temp')
# setCurrentDirectory('26_3_13_rbm_wo_regul_gibbs_step_20_hidden_100_widthline_1_iter_2401_wo_corner')
# clearCurrentDirectory()
setCurrentDirectory('26_3_13_rbm_wo_regul_gibbs_step_10_hidden_500_widthline_1_iter_3201')

SetGreyAsBlack()
# SetDontDrawBlackContour()
dials = DrawDials(Tick(0, 0, 0), Tick(59, 0, 0), imageSize)
dials = DrawDials(Tick(0, 0, 0), Tick(59, 0, 0), imageSize)
appearance = dials[0]
# divide to blocks
dataPrime = [convertImageToVector(element) for element in dials]

eachIteration = 50
countStep = 801
countGibbs = 20
eachIteration = 200
countStep = 7
countGibbs = 10
learningRate = 0.01


# rbm = OpenRBM(getStringData())
rbm = createSimpleRBM(300, 900)
rbm = createSimpleRBM(500, 900)
m = T.matrix()
n = T.iscalar()
s = T.fscalar()
v = T.vector()
print "start create learn function"
grad_func = rbm.grad_function(m, countGibbs, MODE_WITHOUT_COIN, learningRate)
print "start learn"
from_func = rbm.gibbs_function(v, 1, MODE_WITHOUT_COIN)
from_func = rbm.gibbs_function(m, countGibbs, MODE_WITH_COIN_EXCEPT_LAST)
print "Have created function"
rnd_func = rbm.gibbs_function_from_rnd(1, MODE_WITHOUT_COIN)
rnd_func = rbm.gibbs_function_from_rnd(countGibbs, MODE_WITHOUT_COIN)
print "Have created function"

sample = rbm.bm.generateRandomsFromBinoZeroOne(T.ones_like(rbm.vBias) * 0.5)
res, updates = rbm.bm.gibbs_all(sample, rbm.W, rbm.vBias, rbm.hBias, countGibbs, MODE_WITHOUT_COIN)
rnd_func = theano.function([], res, updates=updates)

tic()
for idx in range(countStep):
tic()
print idx, grad_func(dataPrime), toc()
if idx % eachIteration == 0:
saveImage(convertProbabilityVectorToImage(appearance, rnd_func()), "train_step_rnd_1_" + str(idx))
saveImage(convertProbabilityVectorToImage(appearance, rnd_func()), "train_step_rnd_2_" + str(idx))
saveImage(convertProbabilityVectorToImage(appearance, rnd_func()), "train_step_rnd_3_" + str(idx))
saveImage(convertProbabilityVectorToImage(appearance, rnd_func()), "train_step_rnd_4_" + str(idx))
saveImage(makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(appearance, rnd_func())), "train_step_rnd_1_" + str(idx))
saveImage(makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(appearance, rnd_func())), "train_step_rnd_2_" + str(idx))
saveImage(makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(appearance, rnd_func())), "train_step_rnd_3_" + str(idx))
saveImage(makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(appearance, rnd_func())), "train_step_rnd_4_" + str(idx))

saveImage(convertProbabilityVectorToImage(appearance, from_func(dataPrime[0])), "train_step_from_1_" + str(idx))
saveImage(makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(appearance, from_func(dataPrime))), "train_step_from_1_" + str(idx))


print "time learning: ", toc()
Expand All @@ -62,10 +68,19 @@
saveImage(convertProbabilityVectorToImage(appearance, rnd_func()), "6")
saveImage(convertProbabilityVectorToImage(appearance, rnd_func()), "7")

saveImage(convertProbabilityVectorToImage(appearance, from_func(dataPrime[0])), "1f")
saveImage(convertProbabilityVectorToImage(appearance, from_func(dataPrime[1])), "2f")
saveImage(convertProbabilityVectorToImage(appearance, from_func(dataPrime[2])), "3f")
saveImage(convertProbabilityVectorToImage(appearance, from_func(dataPrime[3])), "4f")
saveImage(convertProbabilityVectorToImage(appearance, from_func(dataPrime[4])), "5f")
saveImage(convertProbabilityVectorToImage(appearance, from_func(dataPrime[5])), "6f")
saveImage(convertProbabilityVectorToImage(appearance, from_func(dataPrime[6])), "7f")

i = T.iscalar()
from_func = rbm.gibbs_function(v, i, MODE_WITHOUT_COIN)
print "Have created function"
for idx in range(1, 15):
saveImage(convertProbabilityVectorToImage(appearance, from_func(dataPrime[0], idx)), str(idx) + 'from0')

sample = rbm.bm.generateRandomsFromBinoZeroOne(T.ones_like(rbm.vBias) * 0.5)
res, updates = rbm.bm.gibbs_all(sample, rbm.W, rbm.vBias, rbm.hBias, i, MODE_WITHOUT_COIN)
rnd_func = theano.function([i], res, updates=updates)
# rnd_func = rbm.gibbs_function_from_rnd(i, MODE_WITHOUT_COIN)
for idx in range(1, 25):
saveImage(makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(appearance, rnd_func(idx))), str(idx) + 'from_rnd1')

for idx in range(1, 25):
saveImage(makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(appearance, rnd_func(idx))), str(idx) + 'from_rnd2')
24 changes: 12 additions & 12 deletions rbm/RTRBM_test_clocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,21 +47,21 @@
tic()
print idx, func(trainBlock), ', time:', toc()
if idx % 50 == 0:
makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f(data[1]))).save(str(idx) + "anim_train6.gif", "GIF")
makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f(x1))).save(str(idx) + "x1anim_train6.gif", "GIF")
makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f(x2))).save(str(idx) + "x2anim_train6.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f(data[1]))).save(str(idx) + "anim_train6.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f(x1))).save(str(idx) + "x1anim_train6.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f(x2))).save(str(idx) + "x2anim_train6.gif", "GIF")

makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f5(data[1]))).save(str(idx) + "anim_train6f5.gif", "GIF")
makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f5(x1))).save(str(idx) + "x1anim_train6f5.gif", "GIF")
makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f5(x2))).save(str(idx) + "x2anim_train6f5.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f5(data[1]))).save(str(idx) + "anim_train6f5.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f5(x1))).save(str(idx) + "x1anim_train6f5.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f5(x2))).save(str(idx) + "x2anim_train6f5.gif", "GIF")

makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f(data[1]))).save(str(idx) + "anim_train6.gif", "GIF")
makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f(x1))).save(str(idx) + "x1anim_train6.gif", "GIF")
makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f(x2))).save(str(idx) + "x2anim_train6.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f(data[1]))).save(str(idx) + "anim_train6.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f(x1))).save(str(idx) + "x1anim_train6.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f(x2))).save(str(idx) + "x2anim_train6.gif", "GIF")

makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f5(data[1]))).save(str(idx) + "anim_train6f5.gif", "GIF")
makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f5(x1))).save(str(idx) + "x1anim_train6f5.gif", "GIF")
makeAnimImageFromImages(convertProbabilityMatrixToImages(app, f5(x2))).save(str(idx) + "x2anim_train6f5.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f5(data[1]))).save(str(idx) + "anim_train6f5.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f5(x1))).save(str(idx) + "x1anim_train6f5.gif", "GIF")
makeAnimImageFromVectorImages(convertProbabilityMatrixToImages(app, f5(x2))).save(str(idx) + "x2anim_train6f5.gif", "GIF")

saveData(rtrbm.save())
#
Expand Down
13 changes: 13 additions & 0 deletions rbm/clocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,22 @@ def getImagesFromGif(filename):
def SetGreyAsBlack():
info_clock.colorGrey = info_clock.colorBlack

def SwapBlackAndWhite():
x = info_clock.colorBlack
y = info_clock.colorWhite
if info_clock.colorWhite == info_clock.colorGrey:
info_clock.colorGrey = x

def SetDontDrawBlackContour():
info_clock.isDrawBlackCircle = False

def SetDrawBlackContour():
info_clock.isDrawBlackCircle = True


def SetSecWidth(width):
info_clock.secwidth = width

if __name__ == '__main__':
import time
#main
Expand Down
49 changes: 41 additions & 8 deletions rbm/newRTRBM.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,12 @@
from tictoc import tic, toc
from theano.tensor.basic import TensorVariable

MODE_WITHOUT_COIN = 0;
MODE_WITH_COIN = 1;
MODE_WITHOUT_COIN = 0
MODE_WITH_COIN = 1
MODE_WITH_COIN_EXCEPT_LAST = 2
MODE_WITHOUT_COIN_EXCEPT_LAST = 3

MODE_NAMES = ['W', 'WO', 'WELast', 'WOELast']

class BM:
def __init__(self, theanoRnd):
Expand All @@ -40,12 +43,37 @@ def samplingVByHByV(self, sample, W, vBias, hBias):
self.generateRandomsFromBinoZeroOne(self.computeProbabilityHByV(sample, W, hBias)), W, vBias))

def gibbs(self, sample, W, vBias, hBias, countSteps, function_mode):
gibbsOne_format = lambda sample: self.list_function_for_gibbs[function_mode](sample, W, vBias, hBias);
format, updates = theano.scan(fn=gibbsOne_format, \
outputs_info=sample, \
n_steps=countSteps)
format, updates = self.gibbs_all(sample, W, vBias, hBias, countSteps, function_mode)
return format[-1], updates

def gibbs_all(self, sample, W, vBias, hBias, countSteps, function_mode):
if function_mode < 2:
gibbsOne_format = lambda sample: self.list_function_for_gibbs[function_mode](sample, W, vBias, hBias);
format, updates = theano.scan(fn=gibbsOne_format, \
outputs_info=sample, \
n_steps=countSteps)
return format, updates
else:
if function_mode == MODE_WITH_COIN_EXCEPT_LAST:
gibbsOne_format = lambda sample: self.list_function_for_gibbs[MODE_WITH_COIN](sample, W, vBias, hBias);
format, updates = theano.scan(fn=gibbsOne_format, \
outputs_info=sample, \
n_steps=countSteps - 1)
gibbsOne_format = lambda sample: self.list_function_for_gibbs[MODE_WITHOUT_COIN](sample, W, vBias, hBias);
res = gibbsOne_format(format[-1])
res = T.concatenate([format, [res]])
return res, updates
else:
gibbsOne_format = lambda sample: self.list_function_for_gibbs[MODE_WITHOUT_COIN](sample, W, vBias, hBias);
format, updates = theano.scan(fn=gibbsOne_format, \
outputs_info=sample, \
n_steps=countSteps - 1)
gibbsOne_format = lambda sample: self.list_function_for_gibbs[MODE_WITH_COIN](sample, W, vBias, hBias);
res = gibbsOne_format(format[-1])
res = T.concatenate([format, [res]])
return res, updates


def freeEnergy(self, sample, W, vBias, hBias):
xdotw_plus_bias = T.dot(sample, W) + hBias
xdotvbias = T.dot(sample, vBias)
Expand Down Expand Up @@ -160,10 +188,15 @@ def gradient(self, samples, countstep, function_mode):
grad = theano.grad(energy, gradBlock, [samples, dream])
return energy, grad, gradBlock, update

def grad_function(self, samples, countStep, function_mode, learning_rate):
def grad_function(self, samples, countStep, function_mode, learning_rate, regularization = 0):
energy, grad, gradBlock, update = self.gradient(samples, countStep, function_mode)
for u, v in zip(gradBlock, grad):
update[u] = u - learning_rate * (v + 0.1123 * u)
update[u] = u - learning_rate * (v + u * regularization)
#+ 0.421 * u)
# 0.01239 * u)
# 0.321 * u)
# 0.123 * u)
# 0.05721 * u) # + 0.0923 * u)
Varibles = [samples]
if isinstance(countStep, TensorVariable):
Varibles.append(countStep)
Expand Down
106 changes: 106 additions & 0 deletions rbm/rbmTest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
__author__ = 'gavr'

from newRTRBM import *
from clocks import *
from utils import *
from tictoc import tic, toc
from StringIO import StringIO

def rbmTest(imageSize = 30, \
NotDrawBackGround = False, \
countIteration = 2401, \
outputEveryIteration = 100, \
countGibbs = 10,
learningRate = 0.01,
hiddenVaribles = 100,
secWidth = 1,
learningMode = MODE_WITHOUT_COIN,
numOutputRandom = 10,
regularization = 0, prefixName = ''):
string = StringIO()
string.write(prefixName)
string.write('IS_'+str(imageSize))
string.write('_bg_'+str(NotDrawBackGround))
string.write('_ci_'+str(countIteration))
string.write('_cg_'+str(countGibbs))
string.write('_lr_'+str(learningRate))
string.write('_lm_'+MODE_NAMES[learningMode])
string.write('_h_'+str(hiddenVaribles))
string.write('_sW_'+str(secWidth))
string.write('_r_'+str(regularization))
setCurrentDirectory(string.getvalue())
SetGreyAsBlack()
if NotDrawBackGround:
SetDontDrawBlackContour()
else:
SetDrawBlackContour()
SetSecWidth(secWidth)
dials = DrawDials(Tick(0, 0, 0), Tick(59, 0, 0), imageSize)
appearance = dials[0]
dataPrime = [convertImageToVector(element) for element in dials]
rbm = createSimpleRBM(hiddenVaribles, imageSize * imageSize)
m = T.matrix()
n = T.iscalar()
s = T.fscalar()
v = T.vector()
print "start create learning function", tic()
grad_func = rbm.grad_function(m, countGibbs, learningMode, learningRate, regularization)
print "learning function has been built: ", toc()
print "start contruct gibbs function"
tic()
sample = rbm.bm.generateRandomsFromBinoZeroOne(
T.reshape(
T.repeat(T.ones_like(rbm.vBias) * 0.5, numOutputRandom),
(numOutputRandom, imageSize * imageSize)))
res, updates = rbm.bm.gibbs_all(sample, rbm.W, rbm.vBias, rbm.hBias, countGibbs, MODE_WITHOUT_COIN)

rnd_gibbs = theano.function([], T.concatenate([[sample], res]), updates=updates)

res, updates = rbm.bm.gibbs_all(m, rbm.W, rbm.vBias, rbm.hBias, countGibbs, MODE_WITHOUT_COIN)
data_gibbs = theano.function([m], res, updates=updates)
print "Constructed Gibbs function: ", toc()
saveOutput = lambda x, name: \
saveImage(\
makeAnimImageFromMatrixImages(\
convertProbabilityTensorToImages(appearance, x)),
name)
print "Start Learn"
tic()
tic()
for idx in range(countIteration):
res = grad_func(dataPrime)
if idx % outputEveryIteration == 0:
saveOutput(data_gibbs(dataPrime), 'data' + str(idx))
saveOutput(rnd_gibbs(), 'random' + str(idx))
print idx, res, toc()
tic()
print "learning time: ", toc()
saveData(rbm.save())

# rbmTest(countIteration=3201, learningMode=MODE_WITH_COIN_EXCEPT_LAST, countGibbs=10, hiddenVaribles=400, prefixName='1')

countIterations = [3201]
modes = [MODE_WITHOUT_COIN, MODE_WITH_COIN, MODE_WITH_COIN_EXCEPT_LAST, MODE_WITHOUT_COIN_EXCEPT_LAST]
countGibbs = [2, 5, 10, 20, 40, 80]
hidden = [50, 100, 200, 400, 600, 900]
secWidth = [1, 2, 3]
regularization = [0, 0.001, 0.01, 0.005]
NotDrawBackGround = [False, True]

for ci in countIterations:
for cg in countGibbs:
for m in modes:
for h in hidden:
for sw in secWidth:
for r in regularization:
for ndbg in NotDrawBackGround:
rbmTest(\
countIteration=ci, \
learningMode=m, \
countGibbs=cg, \
hiddenVaribles=h, \
NotDrawBackGround=ndbg, \
secWidth=sw, \
regularization=r,\
prefixName='2')

32 changes: 28 additions & 4 deletions rbm/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,18 @@ def convertProbabilityVectorToImage(appereance, vector):
def convertMatrixToImages(appearance, matrix):
return map(lambda x: convertVectorToImage(appearance, x), matrix)

def convertTensorToImages(appearance, tensor):
return map(lambda x: convertMatrixToImages(appearance, x), tensor)

def convertProbabilityMatrixToImages(appearance, matrix):
return map(lambda x: convertProbabilityVectorToImage(appearance, x), matrix)

def convertProbabilityTensorToImages(appearance, tensor):
return map(lambda x: convertProbabilityMatrixToImages(appearance, x), tensor)

# save Data
def saveData(strio):
file = open(ccd.currentDirectory + 'data.txt', 'w')
def saveData(strio, filename = 'data.txt'):
file = open(ccd.currentDirectory + filename, 'w')
file.write(strio)
file.close()

Expand All @@ -40,7 +46,7 @@ def getStringData():
file.close()
return s.getvalue()

def makeAnimImageFromImages(data):
def makeAnimImageFromVectorImages(data):
count = len(data)
size0 = data[0].size
size = (size0[0], count * size0[1])
Expand All @@ -51,6 +57,21 @@ def makeAnimImageFromImages(data):
imag.paste(data[idx], (0, idx * size0[1], size0[1], (idx + 1) * size0[1]))
return imag

def makeAnimImageFromMatrixImages(data):
count1 = len(data)
count2 = len(data[0])
size0 = data[0][0].size
size = (count2 * size0[0], count1 * size0[1])
imag = Image.new(size=size, mode=data[0][0].mode)
if imag.mode == 'P':
imag.putpalette(data[0][0].getpalette())
for idx1 in range(count1):
for idx2 in range(count2):
imag.paste(data[idx1][idx2], \
(idx2 * size0[0], idx1 * size0[1], \
(idx2 + 1) * size0[0], (idx1 + 1) * size0[1]))
return imag

def saveImage(image, filename, ext='GIF'):
image.save(ccd.currentDirectory + filename + '.' + ext, ext)

Expand All @@ -68,8 +89,11 @@ def setCurrentDirectory(name):

def clearCurrentDirectory():
shutil.rmtree(ccd.currentDirectory)
# setCurrentDirectory('26_3_13_rbm_wo_regul_gibbs_step_20_hidden_100_widthline_1_iter_2401')
# setCurrentDirectory('26_3_13_rbm_wo_regul_gibbs_step_80_hidden_100_widthline_1_iter_2401')
# setCurrentDirectory('26_3_13_rbm_wo_regul_gibbs_step_40_hidden_200_widthline_1_iter_2401')

# setCurrentDirectory('25_3_13_rbm_test_temp')
# setCurrentDirectory('26_3_13_rbm_wo_regul_gibbs_step_10_hidden_300_widthline_2_iter_2401')
# clearCurrentDirectory()

# todo image concatinate by horizontal, by vertical
Expand Down

0 comments on commit dd8a6a4

Please sign in to comment.