From b401b2574ec10ac85d716836a8d8a3e0edbf2938 Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Thu, 9 May 2019 00:22:35 -0700 Subject: [PATCH] last changes and token --- __pycache__/models.cpython-37.pyc | Bin 9926 -> 9664 bytes machinelearning.token | 1 + models.py | 91 +++++++++++------------------- 3 files changed, 35 insertions(+), 57 deletions(-) create mode 100644 machinelearning.token diff --git a/__pycache__/models.cpython-37.pyc b/__pycache__/models.cpython-37.pyc index 1f9ab0a12e70c72b1be22f748886ae04c4cb2910..d1547906455eab030a23d6ea52c0735f372ec952 100644 GIT binary patch delta 1554 zcmZuwO>7%g5Z?Fp*Xy5b61$0A*Ce<>+6o%%B85_#5~t9jhA2v?BCMd5ligZQT*rCq zv}sr?9IA4y^f)80goFetQso1uNaa#g!~rfG7J2|Aq+B?_jRP>Vn^0BYry0+infKne zGv7RX>%o;&C7IL(_&xsYo0acR-cLO*mt@$^g1BR#Izo?lLXUdHht;JXwaJFe@-|%( zY;j32rQJFw(kTBxwuVI}!I2 zkD@*$0z}0qx{Nl36S^%Wy5g3;EZ8!DR`?_3T*ahJ1Q>5K0y;F`m^YOm(dam=)^V)O z)|$hHF@~ST22m-X0%f~xLxQRDX*D+#NNby|4jaO73d4jq)ci;qOhML&LL`!grPDM? z5Uu~A`ZM8)bn`Vz`5HhcW3e7VTtPgnY%8;9F$wr$;Y@@DFUb zvi@HB^GiSN-o7wzsu6H(XdpIAs{w760@?cVhQs*1{PE$-kmrVM zP*NmZl>ea@U#H+tfP{@JgMnB;5O0VQZ4YR&E+N)+*@p(gzY^|LAE;syelPLkq^U&= zQD&`&cmcl$9U-0^ z7(fvL3ECAq1dxb8ARv>6)gk@AQ&}=)ifjN9qu2GNt?e3f<~Ci|lo?Vo>>JC1RaM%| zv8`Ky)PyjfG_s>>;C8X^LR^Oq?v5@xb>={DKbzZ&fm;I!v3v~1&PPaL=o(V^Zba~q z!hj1=g+!Hn==la=FD?kM2c%dvtQd$2qSc|2D-zPbt9CVv_F^7p=y4&WIOKvydHE@q z3NAeUBuN7g9zXPKC13!;spY?AC-x4olJzgF>32#ikEiF&crb9p{cD@dx#2K&3NoJ1 zKZw;?&2BiYj{BcxVPXc=Nl<1is_QXy;7~-xRj;)ytZP-ld-7JPs-j`7mLiW;K5~@# zcN6Io3{JYyAmQ+&2&EDkBSYchzZmDqDLy_po|(ZsWUeMlR7+|pZGaW{er}=v$zWOJ zQ~C%$NFOIvUehy1HQ5BpwHmFug=1djcl3f$r8mz6bhQLh204QRL3n>Tvq*{G|8(Sc zB4a7;b3gk&ImW**>C3NCAvjQrF$4@SCO00000 delta 1737 zcmb_cO>7%Q6yBNr_1bH18n zB+{A`wTE8Oz@hYFOYMal@`Z{^rAi18ccc}n5EpK!s)U4)ka)9B9FPza61LvkH{W~n ze&)TI2j{<9%$_j}U4Y-#y>GA7t%poU%MIcMl;psQ@LXc0*{FinQrNm$93WYap{L7*&=U#;4i3B@M)wTxtDjl$~ zGk;qdd{u>tK$B&Eq((A3Y2QETO(Aw~aBOy9*{wkyp;r$U9O{HFjq^2^+K{kgJ3-Z6 zuLmBjli2WGhXh_wvw5X4Q}ZJuG2ST0_?>B>5>VN~M1_1~dA(kBedg%-gGm$e01Bdx zGO~gcY@&V0L|OQ=Tl&N{@1F*gSl&dt<*q?-Ya);Y#2cajskL628co4Wq{t&U8l4|V z3v-F4KoUVpgRK^E54gh{EwnQUlK28d2E<4ZdAoyKN`DIvB7%Y1-=YGd0HXD`Xs{#I z-;n~n1bV%{LkC0!Bn?OwWGza=REe!5g%#e-T!JF-gX#8v%J%vGLivHu24nwKu_(>U16&tZf;Ch(!lJ7-wbU&nErG{@~1aSm5g87DDB`dtbPgb z(ndMK%R6|PJuvp4N^b6DNIxtA6LblUVolMJ4s*K?rgo2;SW&WgZ=L8cJDM3`$Hxos z99=$E#wI*LjLkyXNxgvlc_q7tcpF4rd z?8D)MLnDB`$~F86)no~4gIY<;bdQ=h#jE5HfF#Y?D6qJ=;MF`j?>lg}uX?Kv-Misr zoLfzB#^2ney@bD*|K3>(5tU~s^B|vfFXfjp`l5UHz!M~w0r{HUDO~T>AoCi&XEVbm z%o*-B$trmdlR}1%0eAb}-G@(|SJ0DgZhQixIrc%J zpztUIh+Ud||1V+2*pHJl{}|@nEZ9HlhfyI+T05kfgyUAKSN15#u^cql8(T3B8og8G ZeIfj`3D1= 0): return 1 return -1 @@ -49,12 +49,17 @@ class PerceptronModel(object): Train the perceptron until convergence. """ "*** YOUR CODE HERE ***" - batch_size = 1 - for x, y in dataset.iterate_once(batch_size): - print(x) - print(y) - result_y = self.run(x) - self.w.update(y, .2) + batch_size, cont = 1, True + while(cont): + result = 0 + for x, y in dataset.iterate_once(batch_size): + if (self.get_prediction(x) == nn.as_scalar(y)): + result += 0 + else: + self.w.update(x, nn.as_scalar(y)) + result += 1 + if (result == 0): + cont = False class RegressionModel(object): @@ -67,21 +72,15 @@ class RegressionModel(object): def __init__(self): # Initialize your model parameters here "*** YOUR CODE HERE ***" - model = object.__init__(self) - self.get_data_and_monitor = backend.RegressionDataset(model) - # Remember to set self.learning_rate! # You may use any learning rate that works well for your architecture "*** YOUR CODE HERE ***" - self.learning_rate = 0.1 - self.hidden_size = 300 + self.l1b = nn.Parameter(1, 100) + self.l1 = nn.Parameter(1, 100) + self.two = nn.Parameter(100, 1) + self.l2b = nn.Parameter(1, 1) - self.w1 = nn.Parameter(1, self.hidden_size) - self.w2 = nn.Parameter(self.hidden_size, self.hidden_size) - self.w3 = nn.Parameter(self.hidden_size, 1) - self.b1 = nn.Parameter(self.hidden_size) - self.b2 = nn.Parameter(self.hidden_size) - self.b3 = nn.Parameter(1) + self.multiplier = .01 def run(self, x): """ @@ -93,45 +92,9 @@ class RegressionModel(object): A node with shape (batch_size x 1) containing predicted y-values """ "*** YOUR CODE HERE ***" - self.graph = nn.DataNode( - [self.w1, self.w2, self.w3, self.b1, self.b2, self.b3]) - - if y is not None: - # At training time, the correct output `y` is known. - # Here, you should construct a loss node, and return the nn.Graph - # that the node belongs to. The loss node must be the last node - # added to the graph. - "*** YOUR CODE HERE ***" - input_x = nn.Constant(x) - input_y = nn.Constant(y) - xw1 = nn.MatrixMultiply(self.graph, input_x, self.w1) - xw1_plus_b1 = nn.MatrixVectorAdd(self.graph, xw1, self.b1) - l1 = nn.ReLU(self.graph, xw1_plus_b1) - l1w2 = nn.MatrixMultiply(self.graph, l1, self.w2) - l2w2_plus_b2 = nn.MatrixVectorAdd(self.graph, l1w2, self.b2) - l2 = nn.ReLU(self.graph, l2w2_plus_b2) - l2w3 = nn.MatrixMultiply(self.graph, l2, self.w3) - l2w3_plus_b3 = nn.MatrixVectorAdd(self.graph, l2w3, self.b3) - loss = nn.SquareLoss(self.graph, l2w3_plus_b3, input_y) - - return self.graph - - else: - # At test time, the correct output is unknown. - # You should instead return your model's prediction as a numpy array - "*** YOUR CODE HERE ***" - input_x = nn.Input(self.graph, x) - - xw1 = nn.MatrixMultiply(self.graph, input_x, self.w1) - xw1_plus_b1 = nn.MatrixVectorAdd(self.graph, xw1, self.b1) - l1 = nn.ReLU(self.graph, xw1_plus_b1) - l1w2 = nn.MatrixMultiply(self.graph, l1, self.w2) - l2w2_plus_b2 = nn.MatrixVectorAdd(self.graph, l1w2, self.b2) - l2 = nn.ReLU(self.graph, l2w2_plus_b2) - l2w3 = nn.MatrixMultiply(self.graph, l2, self.w3) - l2w3_plus_b3 = nn.MatrixVectorAdd(self.graph, l2w3, self.b3) - - return self.graph.get_output(l2w3_plus_b3) + # //composition of layers + return nn.AddBias(nn.Linear( + nn.ReLU(nn.AddBias(nn.Linear(x, self.l1), self.l1b)), self.two), self.l2b) def get_loss(self, x, y): """ @@ -144,12 +107,26 @@ class RegressionModel(object): Returns: a loss node """ "*** YOUR CODE HERE ***" + pred_y = self.run(x) + loss = nn.SquareLoss(pred_y, y) + return loss def train(self, dataset): """ Trains the model. """ "*** YOUR CODE HERE ***" + for x, y in dataset.iterate_forever(5): + fn_loss = self.get_loss(x, y) + if nn.as_scalar(fn_loss) <= 0.000007: + break + # //get gradients and continuosly udpate weights + grad_1, grad_b1, grad_2, grad_b2 = nn.gradients( + fn_loss, [self.l1, self.l1b, self.two, self.l2b]) + self.l1.update(grad_1, -self.multiplier) + self.l1b.update(grad_b1, -self.multiplier) + self.two.update(grad_2, -self.multiplier) + self.l2b.update(grad_b2, -self.multiplier) class DigitClassificationModel(object):