def main():
    X, Y = generate_blocks(n_samples=1)
    # X, Y = generate_checker()
    # X, Y = generate_easy(n_samples=1)
    # X, Y = generate_big_checker()
    crf = BinaryGridCRF()
    # clf = StructuredPerceptron(problem=crf, max_iter=100)
    clf = StructuredSVM(problem=crf, max_iter=200, C=100, verbose=10, check_constraints=True)
    # clf = SubgradientStructuredSVM(problem=crf, max_iter=2000, C=100)
    clf.fit(X, Y)
    Y_pred = clf.predict(X)
    i = 0
    loss = 0
    for x, y, y_pred in zip(X, Y, Y_pred):
        loss += np.sum(y != y_pred)
        fig, plots = plt.subplots(2, 2)
        plots[0, 0].set_title("x")
        plots[0, 0].imshow(x[:, :, 0], interpolation="nearest")
        plots[0, 1].set_title("y")
        plots[0, 1].imshow(y, interpolation="nearest")
        plots[1, 0].set_title("unaries")
        w_unaries = np.zeros(4)
        w_unaries[0] = 1.0
        y_unaries = crf.inference(x, w_unaries)
        plots[1, 0].imshow(y_unaries, interpolation="nearest")
        plots[1, 1].set_title("full crf")
        plots[1, 1].imshow(y_pred, interpolation="nearest")
        for plot in plots.ravel():
            plot.set_axis_off()
        fig.savefig("data_%03d.png" % i)
        plt.close(fig)
        i += 1
    print("loss: %f" % loss)
def main():
    X, Y = make_dataset_big_checker(n_samples=1)
    size_y = Y[0].size
    shape_y = Y[0].shape
    n_labels = len(np.unique(Y))
    inds = np.arange(size_y).reshape(shape_y)
    horz = np.c_[inds[:, :-1].ravel(), inds[:, 1:].ravel()]
    vert = np.c_[inds[:-1, :].ravel(), inds[1:, :].ravel()]
    downleft = np.c_[inds[:-1, :-1].ravel(), inds[1:, 1:].ravel()]
    downright = np.c_[inds[:-1, 1:].ravel(), inds[1:, :-1].ravel()]
    edges = np.vstack([horz, vert, downleft, downright]).astype(np.int32)
    graph = sparse.coo_matrix((np.ones(edges.shape[0]),
        (edges[:, 0], edges[:, 1])), shape=(size_y, size_y)).tocsr()
    graph = graph + graph.T

    crf = MultinomialFixedGraphCRFNoBias(n_states=n_labels, graph=graph)
    #crf = MultinomialGridCRF(n_labels=4)
    #clf = StructuredPerceptron(problem=crf, max_iter=50)
    clf = StructuredSVM(problem=crf, max_iter=20, C=1000000, verbose=20,
            check_constraints=True,
            positive_constraint=np.arange(crf.size_psi - 1))
    #clf = SubgradientStructuredSVM(problem=crf, max_iter=100, C=10000)
    X_flat = [x.reshape(-1, n_labels).copy("C") for x in X]
    Y_flat = [y.ravel() for y in Y]
    clf.fit(X_flat, Y_flat)
    #clf.fit(X, Y)
    Y_pred = clf.predict(X_flat)
    #Y_pred = clf.predict(X)

    i = 0
    loss = 0
    for x, y, y_pred in zip(X, Y, Y_pred):
        y_pred = y_pred.reshape(x.shape[:2])
        #loss += np.sum(y != y_pred)
        loss += np.sum(np.logical_xor(y, y_pred))
        if i > 4:
            continue
        fig, plots = plt.subplots(1, 4)
        plots[0].imshow(y, interpolation='nearest')
        plots[0].set_title("gt")
        pw_z = np.zeros((n_labels, n_labels), dtype=np.int32)
        un = np.ascontiguousarray(
                -1000 * x.reshape(-1, n_labels)).astype(np.int32)
        unaries = alpha_expansion_graph(edges, un, pw_z)
        plots[1].imshow(unaries.reshape(y.shape), interpolation='nearest')
        plots[1].set_title("unaries only")
        plots[2].imshow(y_pred, interpolation='nearest')
        plots[2].set_title("prediction")
        loss_augmented = clf.problem.loss_augmented_inference(
                x.reshape(-1, n_labels), y.ravel(), clf.w)
        loss_augmented = loss_augmented.reshape(y.shape)
        plots[3].imshow(loss_augmented, interpolation='nearest')
        plots[3].set_title("loss augmented")
        fig.savefig("data_%03d.png" % i)
        plt.close(fig)
        i += 1
    print("loss: %f" % loss)
Beispiel #3
0
    def fit(self, X, Y):
        w = np.ones(self.problem.size_psi) * 1e-5
        subsvm = StructuredSVM(self.problem,
                               self.max_iter,
                               self.C,
                               self.check_constraints,
                               verbose=0)
        objectives = []
        ws = []
        tracer()
        H = Y
        Y = [y / self.problem.n_states_per_label for y in Y]

        for iteration in xrange(1):
            print("LATENT SVM ITERATION %d" % iteration)
            # find latent variables for ground truth:
            if iteration == 0:
                pass
            else:
                H = [self.problem.latent(x, y, w) for x, y in zip(X, Y)]
            #X_wide = [np.repeat(x, self.problem.n_states_per_label, axis=1)
            #for x in X]
            subsvm.fit(X, H)
            H_hat = [self.problem.inference(x, subsvm.w) for x in X]
            inds = np.arange(len(H))
            for i, h, h_hat in zip(inds, H, H_hat):
                plt.matshow(h.reshape(18, 18))
                plt.colorbar()
                plt.savefig("figures/h_%03d_%03d.png" % (iteration, i))
                plt.close()
                plt.matshow(h_hat.reshape(18, 18))
                plt.colorbar()
                plt.savefig("figures/h_hat_%03d_%03d.png" % (iteration, i))
                plt.close()
            w = subsvm.w
            ws.append(w)
            objectives.append(subsvm.primal_objective_)
            tracer()
        self.w = w
        plt.figure()
        plt.plot(objectives)
        plt.show()
        tracer()
    def fit(self, X, Y):
        w = np.ones(self.problem.size_psi) * 1e-5
        subsvm = StructuredSVM(self.problem, self.max_iter, self.C,
                self.check_constraints, verbose=0)
        objectives = []
        ws = []
        tracer()
        H = Y
        Y = [y / self.problem.n_states_per_label for y in Y]

        for iteration in xrange(1):
            print("LATENT SVM ITERATION %d" % iteration)
            # find latent variables for ground truth:
            if iteration == 0:
                pass
            else:
                H = [self.problem.latent(x, y, w) for x, y in zip(X, Y)]
            #X_wide = [np.repeat(x, self.problem.n_states_per_label, axis=1)
            #for x in X]
            subsvm.fit(X, H)
            H_hat = [self.problem.inference(x, subsvm.w) for x in X]
            inds = np.arange(len(H))
            for i, h, h_hat in zip(inds, H, H_hat):
                plt.matshow(h.reshape(18, 18))
                plt.colorbar()
                plt.savefig("figures/h_%03d_%03d.png" % (iteration, i))
                plt.close()
                plt.matshow(h_hat.reshape(18, 18))
                plt.colorbar()
                plt.savefig("figures/h_hat_%03d_%03d.png" % (iteration, i))
                plt.close()
            w = subsvm.w
            ws.append(w)
            objectives.append(subsvm.primal_objective_)
            tracer()
        self.w = w
        plt.figure()
        plt.plot(objectives)
        plt.show()
        tracer()
def main():
    X, Y = generate_blocks(n_samples=1)
    #X, Y = generate_checker()
    #X, Y = generate_easy(n_samples=1)
    #X, Y = generate_big_checker()
    crf = BinaryGridCRF()
    #clf = StructuredPerceptron(problem=crf, max_iter=100)
    clf = StructuredSVM(problem=crf,
                        max_iter=200,
                        C=100,
                        verbose=10,
                        check_constraints=True)
    #clf = SubgradientStructuredSVM(problem=crf, max_iter=2000, C=100)
    clf.fit(X, Y)
    Y_pred = clf.predict(X)
    i = 0
    loss = 0
    for x, y, y_pred in zip(X, Y, Y_pred):
        loss += np.sum(y != y_pred)
        fig, plots = plt.subplots(2, 2)
        plots[0, 0].set_title("x")
        plots[0, 0].imshow(x[:, :, 0], interpolation='nearest')
        plots[0, 1].set_title("y")
        plots[0, 1].imshow(y, interpolation='nearest')
        plots[1, 0].set_title("unaries")
        w_unaries = np.zeros(4)
        w_unaries[0] = 1.
        y_unaries = crf.inference(x, w_unaries)
        plots[1, 0].imshow(y_unaries, interpolation='nearest')
        plots[1, 1].set_title("full crf")
        plots[1, 1].imshow(y_pred, interpolation='nearest')
        for plot in plots.ravel():
            plot.set_axis_off()
        fig.savefig("data_%03d.png" % i)
        plt.close(fig)
        i += 1
    print("loss: %f" % loss)
    def fit(self, X, Y):
        w = np.ones(self.problem.size_psi) * 1e-5
        subsvm = StructuredSVM(self.problem, self.max_iter, self.C,
                               self.check_constraints, verbose=self.verbose -
                               1, n_jobs=self.n_jobs,
                               break_on_bad=self.break_on_bad)
        #objectives = []
        constraints = None
        ws = []
        #Y = Y / self.problem.n_states_per_label
        H = self.problem.init_latent(X, Y)
        #kmeans_init(X, Y, edges, self.problem.n_states_per_label)
        self.H_init_ = H
        inds = np.arange(len(H))
        for i, h in zip(inds, H):
            plt.matshow(h, vmin=0, vmax=self.problem.n_states - 1)
            plt.colorbar()
            plt.savefig("figures/h_init_%03d.png" % i)
            plt.close()

        for iteration in xrange(10):
            print("LATENT SVM ITERATION %d" % iteration)
            # find latent variables for ground truth:
            if iteration == 0:
                pass
            else:
                H_new = np.array([self.problem.latent(x, y, w)
                                  for x, y in zip(X, Y)])
                if np.all(H_new == H):
                    print("no changes in latent variables of ground truth."
                          " stopping.")
                    break
                print("changes in H: %d" % np.sum(H_new != H))

                # update constraints:
                constraints = [[] for i in xrange(len(X))]
                for sample, h, i in zip(subsvm.constraints_, H_new,
                                        np.arange(len(X))):
                    for constraint in sample:
                        const = find_constraint(self.problem, X[i], h, w,
                                                constraint[0])
                        y_hat, dpsi, _, loss = const
                        constraints[i].append([y_hat, dpsi, loss])
                H = H_new
            #if initialization weak?
            #if iteration == 0:
                #subsvm.max_iter = 10

            #subsvm.fit(X, H, constraints=new_constraints)
            #constraints = subsvm.constraints_
            subsvm.fit(X, H, constraints=constraints)
            #if iteration == 0:
                #subsvm.max_iter = self.max_iter
            H_hat = Parallel(n_jobs=self.n_jobs)(delayed(inference)
                                                 (self.problem, x, subsvm.w)
                                                 for x in X)
            inds = np.arange(len(H))
            for i, h, h_hat in zip(inds, H, H_hat):
                plt.matshow(h, vmin=0, vmax=self.problem.n_states - 1)
                plt.colorbar()
                plt.savefig("figures/h_%03d_%03d.png" % (iteration, i))
                plt.close()
                plt.matshow(h_hat, vmin=0, vmax=self.problem.n_states - 1)
                plt.colorbar()
                plt.savefig("figures/h_hat_%03d_%03d.png" % (iteration, i))
                plt.close()
            w = subsvm.w
            ws.append(w)
            #objectives.append(subsvm.primal_objective_)
        self.w = w
def main():
    X, Y = make_dataset_big_checker(n_samples=1)
    size_y = Y[0].size
    shape_y = Y[0].shape
    n_labels = len(np.unique(Y))
    inds = np.arange(size_y).reshape(shape_y)
    horz = np.c_[inds[:, :-1].ravel(), inds[:, 1:].ravel()]
    vert = np.c_[inds[:-1, :].ravel(), inds[1:, :].ravel()]
    downleft = np.c_[inds[:-1, :-1].ravel(), inds[1:, 1:].ravel()]
    downright = np.c_[inds[:-1, 1:].ravel(), inds[1:, :-1].ravel()]
    edges = np.vstack([horz, vert, downleft, downright]).astype(np.int32)
    graph = sparse.coo_matrix(
        (np.ones(edges.shape[0]), (edges[:, 0], edges[:, 1])),
        shape=(size_y, size_y)).tocsr()
    graph = graph + graph.T

    crf = MultinomialFixedGraphCRFNoBias(n_states=n_labels, graph=graph)
    #crf = MultinomialGridCRF(n_labels=4)
    #clf = StructuredPerceptron(problem=crf, max_iter=50)
    clf = StructuredSVM(problem=crf,
                        max_iter=20,
                        C=1000000,
                        verbose=20,
                        check_constraints=True,
                        positive_constraint=np.arange(crf.size_psi - 1))
    #clf = SubgradientStructuredSVM(problem=crf, max_iter=100, C=10000)
    X_flat = [x.reshape(-1, n_labels).copy("C") for x in X]
    Y_flat = [y.ravel() for y in Y]
    clf.fit(X_flat, Y_flat)
    #clf.fit(X, Y)
    Y_pred = clf.predict(X_flat)
    #Y_pred = clf.predict(X)

    i = 0
    loss = 0
    for x, y, y_pred in zip(X, Y, Y_pred):
        y_pred = y_pred.reshape(x.shape[:2])
        #loss += np.sum(y != y_pred)
        loss += np.sum(np.logical_xor(y, y_pred))
        if i > 4:
            continue
        fig, plots = plt.subplots(1, 4)
        plots[0].imshow(y, interpolation='nearest')
        plots[0].set_title("gt")
        pw_z = np.zeros((n_labels, n_labels), dtype=np.int32)
        un = np.ascontiguousarray(-1000 * x.reshape(-1, n_labels)).astype(
            np.int32)
        unaries = alpha_expansion_graph(edges, un, pw_z)
        plots[1].imshow(unaries.reshape(y.shape), interpolation='nearest')
        plots[1].set_title("unaries only")
        plots[2].imshow(y_pred, interpolation='nearest')
        plots[2].set_title("prediction")
        loss_augmented = clf.problem.loss_augmented_inference(
            x.reshape(-1, n_labels), y.ravel(), clf.w)
        loss_augmented = loss_augmented.reshape(y.shape)
        plots[3].imshow(loss_augmented, interpolation='nearest')
        plots[3].set_title("loss augmented")
        fig.savefig("data_%03d.png" % i)
        plt.close(fig)
        i += 1
    print("loss: %f" % loss)