(self, X, Y, Xtest, Ytest)
| 52 | |
| 53 | |
| 54 | def fit(self, X, Y, Xtest, Ytest): |
| 55 | N, D = X.shape |
| 56 | K = len(set(Y)) |
| 57 | |
| 58 | # hyperparams |
| 59 | max_iter = 30 |
| 60 | lr = 1e-3 |
| 61 | mu = 0.9 |
| 62 | regularization = 1e-1 |
| 63 | batch_sz = 100 |
| 64 | n_batches = N // batch_sz |
| 65 | |
| 66 | cost = self.build(D, K) |
| 67 | l2_penalty = regularization*tf.reduce_mean(self.W**2) / 2 |
| 68 | cost += l2_penalty |
| 69 | train_op = tf.train.MomentumOptimizer(lr, momentum=mu).minimize(cost) |
| 70 | |
| 71 | costs = [] |
| 72 | init = tf.global_variables_initializer() |
| 73 | with tf.Session() as session: |
| 74 | session.run(init) |
| 75 | |
| 76 | for i in range(max_iter): |
| 77 | for j in range(n_batches): |
| 78 | Xbatch = X[j*batch_sz:(j*batch_sz + batch_sz),] |
| 79 | Ybatch = Y[j*batch_sz:(j*batch_sz + batch_sz),] |
| 80 | |
| 81 | session.run(train_op, feed_dict={self.inputs: Xbatch, self.targets: Ybatch}) |
| 82 | if j % 200 == 0: |
| 83 | test_cost = session.run(cost, feed_dict={self.inputs: Xtest, self.targets: Ytest}) |
| 84 | Ptest = session.run(self.predict_op, feed_dict={self.inputs: Xtest}) |
| 85 | err = error_rate(Ptest, Ytest) |
| 86 | print("Cost / err at iteration i=%d, j=%d: %.3f / %.3f" % (i, j, test_cost, err)) |
| 87 | costs.append(test_cost) |
| 88 | |
| 89 | # save the model |
| 90 | self.saver.save(session, self.savefile) |
| 91 | |
| 92 | # save dimensions for later |
| 93 | self.D = D |
| 94 | self.K = K |
| 95 | |
| 96 | plt.plot(costs) |
| 97 | plt.show() |
| 98 | |
| 99 | |
| 100 | def predict(self, X): |
no test coverage detected