In [ ]:
# three types of print
# pprint
# debug print
# pydotprint

In [2]:
# logistic regression
import numpy 
import theano
import theano.tensor as T
rng = numpy.random

N = 400
feats = 784
D = (rng.randn(N, feats), rng.randint(size = N, low = 0, high = 2))
# サンプル数400で、変数が784個ある(全てが標準正規分布に従って出力される)
# 各サンプルに対して結果変数として0,1のどちらかが報告されている
# この二つの情報をまとめたものがD(tuple)
training_steps = 10000

x = T.matrix("x") # 変数を入れる箱
y = T.vector("y") # 結果を入れる箱
w = theano.shared(rng.randn(feats))
b = theano.shared(0., name = "b") # bは定数項?

print("Initial Value:")
print(w.get_value())
print(b.get_value())

# wは係数
p_1 = 1 / (1 + T.exp(-T.dot(x, w) - b)) # dot is inner product
prediction = p_1 > 0.5 # 論理値として、p_1が0.5よりも大きいと1を出力する(振り分け)
xent = -y * T.log(p_1) - (1 - y) * T.log(1 - p_1) # 尤度関数の逆
# 下のcost functionはgenralized logistic regressionのコスト関数
cost = xent.mean() + 0.01 * (w ** 2).sum() 
gw, gb = T.grad(cost, [w,b]) # gradient descentをやるよ

# compile
train = theano.function(inputs = [x, y], outputs = [prediction, xent]
                       ,updates = ((w, w - 0.1 * gw), (b, b - 0.1 * gb))) # 0.1 is a step
predict = theano.function(inputs = [x], outputs = prediction)

# pprint
theano.printing.pprint(prediction)


Initial Value:
[  7.15540319e-01  -1.07691019e+00   7.12875414e-02   8.75413109e-03
   9.50564172e-02  -9.20020836e-01  -2.88057197e-01   3.45456641e-01
  -3.70011801e-01   1.25140874e+00  -1.01364445e+00  -9.25743640e-01
   4.47494661e-02   6.76904035e-01   6.64717864e-02  -4.68378704e-01
  -1.34711363e+00  -3.33085187e-01   2.44916796e-01  -1.24240628e+00
   1.43855773e+00   2.96933805e-01  -1.23888604e+00   8.28019852e-01
   8.41064926e-02  -9.36294914e-02   2.16339911e-01   9.46827779e-01
   1.32040115e+00  -5.10246962e-01  -1.26517787e+00   5.36201316e-01
   7.97280517e-01   1.69913795e+00  -1.71131214e+00  -2.06148943e-01
   1.36212261e+00   2.15134022e+00  -2.72976330e-01   1.42132198e+00
   3.91643019e-01   1.47533570e+00  -2.02990574e-01   3.88377575e-01
   6.93889695e-02   1.62198845e+00  -1.33117607e+00  -7.19141865e-01
   3.71797910e-01  -1.39141931e+00  -4.83127788e-01   9.28620461e-01
  -5.21476027e-02  -4.42062868e-01  -4.70259834e-01  -8.34078790e-01
  -3.44580324e-01  -1.02671969e+00  -8.50036884e-01   1.56532207e-02
   7.24251462e-01  -1.29751251e+00   1.67334492e+00   2.90101654e-02
  -8.53276350e-01  -2.37135192e-01   6.80407972e-01   2.44387832e-01
  -1.00612478e+00   1.43155214e-02  -2.80650481e-01  -2.88062193e-01
  -3.87113392e-03  -7.44369376e-01   3.41126767e-01   5.64108371e-01
   1.56317781e+00   1.97978228e+00   6.22450262e-01  -1.72038573e-02
  -2.28794971e-01   1.13041553e+00   9.46558477e-02  -8.40128934e-01
   1.04185057e+00   2.31587052e+00  -3.42394871e-01   9.68550660e-01
   8.02863763e-01   8.87034819e-01  -7.38217577e-01   1.66019772e+00
  -1.32644842e+00   5.14203533e-01   6.91308328e-01  -6.90986724e-02
   1.04504048e+00  -1.02069482e-01  -6.20136953e-01   1.80858965e+00
  -1.58829380e-02   8.02946624e-01   5.48768344e-01   6.13784709e-01
  -1.54070455e+00  -4.23942539e-01  -8.89003349e-01  -1.04635439e+00
  -7.60866066e-01  -6.48820707e-01  -2.13025843e+00   4.23551062e-01
  -9.16083511e-01  -1.00145068e+00  -2.33213902e-01  -1.97323066e-01
   4.38448824e-01   3.83442418e-01  -6.52881634e-01  -1.02278593e+00
   4.62966660e-02  -6.29002076e-01   3.73172280e-01   6.99887939e-01
  -4.59645546e-02   7.16969381e-01  -3.70964310e-01  -9.26728530e-01
  -6.45248921e-01  -4.52611806e-01  -3.91025912e-01  -6.57910636e-01
  -9.54241346e-01   1.10932061e+00  -4.58710325e-01  -9.51497581e-02
  -8.12414969e-01   5.96591370e-01  -9.37288016e-01  -4.82143839e-01
  -1.97148237e-01   7.18277888e-01   9.68667508e-01  -9.02632263e-02
   1.36412391e+00  -8.41956401e-01  -1.19251571e+00   8.41875780e-01
  -4.82486274e-01  -9.73642508e-01   1.37293401e+00  -4.52164296e-02
   1.07797702e+00   1.66271905e-01   1.89530784e-01  -3.14024489e-01
   1.63701099e-01   1.97736199e-01  -8.08292347e-01   3.11104302e-02
   4.22806137e-01  -1.63578840e+00  -1.57049506e+00  -1.22799931e+00
   1.97552148e+00   2.65320468e-01  -5.06315131e-03   8.91634575e-01
   2.62540456e+00  -2.94663670e-01  -7.06672561e-01  -5.84233235e-01
   1.07028534e+00  -3.34679578e-02   1.63275544e-01   1.09355168e-01
  -1.45695089e+00   5.99301512e-01   9.51804532e-01  -1.38690292e-01
   6.47942780e-02  -1.51950729e+00   1.09030146e+00  -6.16239243e-01
   2.73281347e-01   9.60666408e-01  -5.42885602e-01  -1.42440819e-01
   6.64586807e-02   7.33008597e-01   3.64514701e-01   9.47426342e-01
  -1.17834828e+00  -1.19036204e+00   3.48318860e-01   8.52680719e-01
   6.53593589e-01   6.35111458e-02   2.47576518e+00   4.78281687e-01
   7.16948148e-01   8.48613764e-01   1.71298919e+00   5.12257568e-01
  -5.92582307e-02   7.60680102e-01   5.82747542e-01   1.27815309e-01
  -1.60621540e-01  -1.10591551e+00  -5.57311741e-02  -1.85666642e-01
   8.08758966e-01   7.66557035e-01  -1.11775119e+00   5.15246972e-01
   7.10345907e-01  -1.00052743e+00  -5.70987177e-01  -2.61940517e-02
   2.10659476e-01  -2.78837567e-01   1.75574350e+00  -1.52571249e+00
  -2.91628583e-01  -1.40807941e+00  -5.85267686e-01  -8.77330033e-01
  -9.71359486e-01  -8.51519930e-01   1.06580222e+00   1.80914841e+00
  -9.29713616e-02   1.49561680e+00  -7.77921581e-01  -2.80008527e-01
   7.08338973e-02   1.69733610e-01   1.32710854e+00   5.65883780e-01
   8.11414951e-01  -2.06546350e+00   1.08416893e+00  -1.15313677e+00
   2.02866833e+00  -1.95393167e-02   2.06572232e+00   4.83384235e-01
  -8.24990979e-01  -2.02409209e+00   2.42271904e+00   1.21926386e+00
   7.50345634e-01  -8.70077604e-01   7.46276259e-01  -1.84279374e+00
   4.82354214e-01   1.06668685e+00  -3.38669997e-02   6.07915595e-01
  -1.50315061e+00   2.73162142e-01  -3.09924556e-02  -2.93311979e-01
   1.63766517e+00   1.50283249e-01   1.02450967e+00   1.81878686e+00
   1.20437858e+00  -1.29694759e-01   1.66691997e+00   4.10979949e-01
   7.72124977e-01   5.76382209e-01  -5.54951446e-01  -1.15315729e+00
  -1.25822343e+00  -3.08066454e-01   2.12425355e+00   4.02119282e-01
   6.13335265e-01  -2.82935314e+00  -2.17990384e-01   9.29962752e-02
   1.80831447e+00   1.16309232e+00   2.73493061e-01   1.35856007e+00
  -6.22623897e-01   9.58530804e-01   2.14439230e-01  -1.59033125e-01
  -2.67576399e-01  -1.57952658e+00   1.94318920e+00  -3.72292004e-01
  -5.88383351e-01  -1.31636641e+00   1.43354166e+00  -7.43914556e-01
  -1.10362976e+00   5.02633260e-01   1.21922676e-02  -3.86395867e-01
   3.23970049e-01  -1.37854481e+00   4.77318547e-01  -6.90653837e-01
  -1.82247449e+00  -8.09137055e-01   3.86490488e-02  -1.98873421e-01
  -1.33780707e-02   1.01251577e+00   7.52044008e-01   2.09969065e+00
  -9.33266057e-01   9.44915138e-01  -2.40227815e-01   1.86573962e+00
  -1.70799313e-01  -7.08690539e-01  -9.78071265e-01  -3.16199846e-02
  -1.91661172e+00   1.21038625e+00   6.00996388e-01   1.52402253e+00
  -7.26226062e-01  -1.95551916e-01  -1.28836451e+00   2.03403226e+00
   1.19325736e+00  -5.28895005e-01   6.94280611e-01   9.25452852e-01
   2.93482452e-01  -1.95652223e+00  -1.02194756e+00  -1.00334398e+00
  -8.13462914e-01  -1.91538097e-01  -9.68423593e-01   8.96672068e-01
   1.81609277e+00   4.74693324e-01   2.95734938e-01   1.97774177e-01
  -1.26510741e+00   8.11918552e-01   1.33940972e+00  -8.88386056e-01
   2.24933602e-02   4.66994188e-01   1.03995092e+00   1.05288772e+00
   1.51527248e+00  -1.15835029e+00  -1.26384749e-01   4.69621277e-01
  -1.00301246e+00  -3.61895317e-01   1.83668505e+00  -3.37886374e-01
   2.52644531e-01   1.21811611e+00  -1.18777851e+00   4.57023905e-01
   8.72682107e-02   1.43602226e+00  -2.13758429e-01   1.18319378e+00
   2.36242982e-01  -2.85780058e-01  -1.22893583e-01  -1.86426821e+00
   1.53457445e-01   1.57841194e+00   5.13988314e-01   2.17517915e+00
   5.24316738e-01   7.75191130e-01   6.58838681e-01   1.34700321e-01
  -1.99706834e-02  -1.39484583e+00  -1.82084003e-01  -1.36740776e+00
   1.65675069e+00  -1.40168674e+00   5.05569939e-01  -1.16578380e+00
   1.24506030e+00  -1.02076378e+00   6.02822566e-01  -2.81146689e-01
   2.54467358e+00   1.19485420e+00  -3.86188732e-01  -2.06667345e-01
   3.53921354e-01  -4.78597558e-01  -2.10437018e-01   2.01811367e+00
   1.35593552e+00   1.72754842e-01  -3.01656583e-02  -1.73128651e+00
  -1.09999517e-02   2.49756114e+00  -4.57504852e-01  -2.38625729e+00
   6.54795330e-01  -1.99526592e-01   3.90852291e-01   3.90515374e-01
   1.07545911e+00  -8.98193660e-01   6.76535704e-01   6.72803412e-01
   4.02920017e-02   5.52470460e-01   5.20145850e-01  -9.35133632e-01
  -9.50191664e-01   2.21841485e-01  -4.07243587e-01   9.49332755e-01
   2.95959074e-01  -5.67972443e-01  -1.71209855e+00   6.18885418e-01
   2.07985368e-02   1.91756331e+00   2.42834117e+00   1.36510328e-01
  -2.55268075e-01   5.19519522e-01   1.61918564e+00   1.52754905e+00
  -1.41523252e-03  -8.33941319e-01   6.45878892e-01  -7.65752094e-01
   7.17036766e-01   6.29542831e-01  -2.23910956e+00  -9.62752591e-01
  -1.16963440e+00   5.14861383e-01   5.41343370e-01   1.07261553e+00
   6.47642622e-01   7.13658982e-01   1.22635142e+00  -1.74584610e+00
   5.69604232e-01   1.12493552e+00   3.25651018e-01  -7.12108672e-01
   4.07496770e-01   2.28400471e-01  -6.69734612e-02  -3.58949601e-01
   8.67218208e-02   7.00992799e-01   2.44667342e-01   3.73243450e-01
   4.74141212e-01   2.45379754e+00   4.04987859e-01   1.31038595e-02
  -1.12923640e+00   4.69917384e-01   8.31882074e-02   3.61139689e-01
   2.54975534e-01  -3.54997015e-01   1.84840757e-01   7.87228869e-01
  -9.65827044e-01  -5.43354440e-01  -1.06249136e+00  -1.04255118e+00
  -9.22399436e-01  -6.49585673e-02  -1.84872586e-01  -1.30378444e-01
  -1.77082548e+00  -7.56069154e-01   2.94528527e-01  -9.85977180e-01
  -1.67991143e+00  -1.04368173e+00  -1.16892473e+00   4.66850661e-01
   9.12074063e-01  -1.19141047e+00  -8.46968250e-01  -3.93754933e-01
  -1.98173971e+00   1.95280044e-01  -1.49004992e+00   1.67222809e-01
  -4.72158238e-01  -9.30794014e-01   6.02870541e-01  -1.55646025e+00
   4.69380259e-01  -1.70173434e+00   1.26804048e+00  -1.61650247e+00
  -1.04044620e+00   1.06270866e+00  -8.44972015e-01  -2.49363486e-01
  -3.22619569e-01  -2.03133852e+00  -1.67854543e+00   8.37492299e-01
  -9.81520999e-01  -1.08924647e+00  -8.57532286e-01  -1.30930307e+00
   8.75540415e-01  -3.22227678e-01  -9.39987446e-01  -1.13527543e+00
   1.60544975e+00  -1.52555277e+00  -1.80466823e+00  -6.87213648e-01
  -1.38027588e-01  -1.40074462e+00   8.12580001e-02   8.65561842e-01
  -3.87073203e-01   3.19697611e-01  -4.11911625e-01  -7.56117972e-01
  -1.23706391e-01   1.99232608e-02  -9.04014801e-01   1.42124711e+00
  -5.73961530e-01   1.28094853e+00  -5.16227283e-01   2.27866051e-01
   6.72907355e-03   7.36125342e-01   9.03597901e-01  -1.57478796e+00
  -2.21967131e-01   1.68954743e+00   8.58671413e-01  -1.27222838e+00
   1.78114162e-01  -8.04964683e-01  -4.16370186e-01  -5.95689394e-01
  -9.39663574e-01   1.82653905e+00   7.29500685e-01   5.04797228e-01
   5.08411834e-01  -4.23289176e-01  -1.33020271e+00  -2.06064449e-01
  -5.23164644e-01  -1.26997398e+00  -5.80332344e-02  -4.25458076e-01
  -2.00180742e-01   5.86825212e-01  -6.08330191e-02  -3.78348833e-01
  -6.16849058e-01  -1.33580258e+00   1.04882014e+00  -2.38743837e-01
  -8.44516340e-01  -6.52791751e-01  -1.93303107e+00   2.17038957e-01
   3.42950404e-01   1.09252764e+00  -1.78104052e+00   2.83584774e-01
   1.70368724e-01  -2.28868183e-01   3.18758065e-01  -2.17953670e-01
   8.67715696e-01   1.02108246e+00   7.04858290e-02  -1.82888568e+00
   1.44705447e+00  -6.62031898e-01   2.25640178e+00  -5.58817758e-01
  -1.21593763e+00  -8.87186647e-01   1.50125555e+00  -4.50828656e-04
   9.83509425e-03   1.02260870e+00   5.43497230e-01  -5.00404804e-01
  -1.86027838e-01  -1.05435509e+00  -2.85524668e-01   3.98537517e-01
  -1.21506720e-02   1.50532387e-01   5.69495686e-01   5.88454978e-01
  -7.29568116e-01  -5.20182939e-01  -1.68423597e+00  -6.79348148e-01
   8.37603946e-01  -8.90802688e-01  -7.13681309e-01  -5.35601765e-01
   2.19252309e-01  -1.64243660e-03   8.83756322e-01  -3.44583151e-01
   2.80422412e-01  -9.88984533e-02   1.11198545e+00  -6.74586238e-01
   3.84511586e-01  -2.90550946e-01  -2.33363851e+00  -7.68615745e-01
   8.52473155e-01   9.87770893e-01  -9.42099782e-01   1.31936045e-01
  -2.57786085e+00   1.78252931e-01   6.03347244e-02  -9.79155696e-01
   1.80201076e-01   6.74902245e-01   4.66839984e-01  -2.71440880e+00
   1.71108445e+00  -8.91843018e-01   1.56647749e+00  -1.29778112e-01
  -1.09849876e+00   1.19880756e+00  -9.70345789e-01  -3.07127310e+00
  -4.20405684e-02   6.61549362e-02   1.08014254e+00   1.72217958e+00
   1.14483718e+00   9.38299358e-02   3.45678986e-01  -8.52693315e-01
  -2.27812689e-01  -4.41502513e-01   1.10126665e-01  -1.39325747e+00
   4.37154385e-01   1.33104819e-01  -9.46721971e-01  -1.17959949e+00
  -7.89229015e-02  -7.55397573e-01  -3.68902127e-01  -1.49496023e-01
   1.94275248e-01  -1.52976699e+00   2.89308798e-01  -1.12950736e+00
   4.28008455e-01  -5.70502245e-01   1.58646757e+00  -1.20854697e+00
   2.18206659e-01  -1.13558298e+00  -6.91238944e-01   2.89867223e-02
  -3.79751323e-01   4.81701635e-02   7.01352439e-01   1.09485133e+00
   3.66024174e-01   1.70012707e+00   1.76384137e+00  -1.16735430e+00
  -4.50846605e-01   1.63900012e-01   2.01647496e+00   3.90102748e-01
   1.86323852e+00  -6.44925565e-02  -1.32577530e+00  -1.21005749e+00
   2.59068902e-01   1.30244003e+00   7.14716288e-01   1.01802258e+00
   1.24186673e+00   1.06036097e+00  -1.59597630e-01  -6.63713347e-01
   8.58788090e-01  -1.39183574e+00   3.83214685e-01  -6.00627203e-01
   5.86267344e-01  -4.85813769e-02  -6.96904499e-02   1.37415941e+00
  -3.38781200e-01  -6.73841590e-01   2.40812669e-01   6.16065267e-01
   9.80837842e-01   3.70841339e-01   1.81270693e-01  -5.53429987e-01
   2.44989529e-02  -1.73502666e+00  -2.24762561e-01   1.24343673e+00
  -2.54929122e-01  -1.15066355e+00   1.72692883e-01  -6.37933595e-02
   7.42347518e-02   5.01716790e-02  -3.59734481e-01  -1.25157304e+00
   5.43553069e-01   9.14569513e-01   7.28509411e-01  -8.56569554e-01
  -1.17311774e+00  -7.89531273e-01   1.10971180e+00   1.63431444e-01
   7.29866407e-01  -2.09407790e-01  -5.65944145e-03  -7.21911413e-01
  -5.06733376e-01  -1.03430534e+00  -2.92935919e-01   1.77101448e-01
   4.88867276e-01   7.36302122e-01   2.38587639e-01   4.60148956e-01
  -7.86424300e-02  -2.92201002e-01   2.40509092e-01  -2.37350504e+00
  -7.31438633e-01   3.35958490e-01  -3.04680448e-01   6.39938298e-01
   1.32154267e+00  -2.10912257e-02   1.81541331e+00  -1.64285260e+00
   2.80069361e-01  -1.37431923e+00   8.32806908e-01   6.41629671e-01
   1.23049590e+00   5.82805315e-01   1.72268722e+00   1.14724982e+00
  -9.35724204e-01  -2.62877152e-01   1.05730071e-01  -1.36992991e+00]
0.0
Out[2]:
'gt((TensorConstant{1} / (TensorConstant{1} + exp(((-(x \\dot <TensorType(float64, vector)>)) - b)))), TensorConstant{0.5})'

In [3]:
# pre-compilation
theano.printing.debugprint(prediction)


Elemwise{gt,no_inplace} [@A] ''   
 |Elemwise{true_div,no_inplace} [@B] ''   
 | |DimShuffle{x} [@C] ''   
 | | |TensorConstant{1} [@D]
 | |Elemwise{add,no_inplace} [@E] ''   
 |   |DimShuffle{x} [@F] ''   
 |   | |TensorConstant{1} [@D]
 |   |Elemwise{exp,no_inplace} [@G] ''   
 |     |Elemwise{sub,no_inplace} [@H] ''   
 |       |Elemwise{neg,no_inplace} [@I] ''   
 |       | |dot [@J] ''   
 |       |   |x [@K]
 |       |   |<TensorType(float64, vector)> [@L]
 |       |DimShuffle{x} [@M] ''   
 |         |b [@N]
 |DimShuffle{x} [@O] ''   
   |TensorConstant{0.5} [@P]

In [4]:
# post-compilation
theano.printing.debugprint(predict)


Elemwise{Composite{GT(scalar_sigmoid((-((-i0) - i1))), i2)}} [@A] ''   4
 |CGemv{inplace} [@B] ''   3
 | |Alloc [@C] ''   2
 | | |TensorConstant{0.0} [@D]
 | | |Shape_i{0} [@E] ''   1
 | |   |x [@F]
 | |TensorConstant{1.0} [@G]
 | |x [@F]
 | |<TensorType(float64, vector)> [@H]
 | |TensorConstant{0.0} [@D]
 |InplaceDimShuffle{x} [@I] ''   0
 | |b [@J]
 |TensorConstant{(1,) of 0.5} [@K]

In [5]:
# pre-compilation graph
theano.printing.pydotprint(prediction, outfile="pic/logreg_pydotprint_prediction.png", var_with_name_simple=True)


The output file is available at pic/logreg_pydotprint_prediction.png

In [8]:
# optimized graph
theano.printing.pydotprint(train, outfile="pic/logreg_pydotprint_train.png", var_with_name_simple=True)


The output file is available at pic/logreg_pydotprint_train.png

In [ ]: