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 [ ]:
Content source: keiikegami/theano
Similar notebooks: