Exemple #1
0
def main():
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('responses', nargs='+', type=str)
    parser.add_argument('-t', '--title', default='', type=str)
    parser.add_argument('-o', '--output', default='log-responses', type=str)
    parser.add_argument('-l', '--layers', nargs='?', type=str)
    parser.add_argument('-a', '--alpha', default=0.99, type=float)

    args = parser.parse_args()
    alpha = args.alpha

    vz = VzLog(args.output)
    vz.title(args.title)
    vz.log('alpha =', alpha)

    plt.figure()

    layers = args.layers

    for fn in args.responses:
        data = dd.io.load(fn)
        name = data['name']
        if layers is None:
            layers = data['layers']
        y = []
        ystd = []
        for l in layers:
            rs = []
            for X in data['responses'][l]:
                C = np.corrcoef(X.T)

                rs.append(
                    np.where(
                        np.sort(np.linalg.eigvals(C))[::-1].cumsum() /
                        C.shape[0] > alpha)[0][0] / C.shape[0])
            y.append(np.mean(rs))
            ystd.append(np.std(rs))
        plt.errorbar(np.arange(len(y)), y, yerr=ystd, label='{}'.format(name))
        plt.xticks(np.arange(len(y)), layers)
    plt.ylabel('<- Redundancy / Identity-like ->')
    plt.legend(loc=4)
    plt.ylim((0, 1))
    plt.savefig(vz.impath('svg'))
    plt.close()
Exemple #2
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('caffemodel', type=str)
    parser.add_argument('-o', '--output', default='log-network', type=str)

    args = parser.parse_args()

    vz = VzLog(args.output)

    mm = caffe.proto.caffe_pb2.NetParameter()
    with open(args.caffemodel, 'rb') as f:
        mm.ParseFromString(f.read())

    vz.title('Network')
    c = 0
    for layer in mm.layers:
        if layer.blobs:
            blob = layer.blobs[0]
            shape = _blob_shape(blob)

            X = np.asarray(blob.data).reshape(shape)

            vz.section(layer.name)
            vz.log('min', X.min(), 'max', X.max(), 'mean', X.mean(), 'std', X.std())
            vz.log('shape', X.shape)

            if c == 0:
                grid = dd.plot.ColorImageGrid(X.transpose(0, 2, 3, 1),
                                              vmin=None, vmax=None)
            else:
                grid = dd.plot.ImageGrid(X, cmap=cm.rainbow,
                                         vmin=None, vmax=None, vsym=True)

            grid.save(vz.impath(), scale=4)


            blob = layer.blobs[1]
            shape = _blob_shape(blob)

            X = np.asarray(blob.data).reshape(shape)

            # Plot biases
            vz.text('Bias')
            vz.log('shape', X.shape)

            plt.figure(figsize=(6, 1.5))
            plt.plot(X.ravel())
            plt.xlim((0, X.size-1))
            plt.savefig(vz.impath('svg'))
            plt.close()

            c += 1
Exemple #3
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("caffemodel", type=str)
    parser.add_argument("-o", "--output", default="log-network", type=str)

    args = parser.parse_args()

    vz = VzLog(args.output)

    mm = caffe.proto.caffe_pb2.NetParameter()
    with open(args.caffemodel, "rb") as f:
        mm.ParseFromString(f.read())

    vz.title("Network")
    c = 0
    for layer in mm.layers:
        if layer.blobs:
            blob = layer.blobs[0]
            shape = _blob_shape(blob)

            X = np.asarray(blob.data).reshape(shape)

            vz.section(layer.name)
            vz.log("min", X.min(), "max", X.max(), "mean", X.mean(), "std", X.std())
            vz.log("shape", X.shape)

            if c == 0:
                grid = dd.plot.ColorImageGrid(X.transpose(0, 2, 3, 1), vmin=None, vmax=None)
            else:
                grid = dd.plot.ImageGrid(X, cmap=cm.rainbow, vmin=None, vmax=None, vsym=True)

            grid.save(vz.impath(), scale=4)

            blob = layer.blobs[1]
            shape = _blob_shape(blob)

            X = np.asarray(blob.data).reshape(shape)

            # Plot biases
            vz.text("Bias")
            vz.log("shape", X.shape)

            plt.figure(figsize=(6, 1.5))
            plt.plot(X.ravel())
            plt.xlim((0, X.size - 1))
            plt.savefig(vz.impath("svg"))
            plt.close()

            c += 1
Exemple #4
0
def main():
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('responses', nargs='+', type=str)
    parser.add_argument('-t', '--title', default='', type=str)
    parser.add_argument('-o', '--output', default='log-responses', type=str)
    parser.add_argument('-m', '--model', nargs='+', type=str)
    parser.add_argument('-l', '--layers', nargs='?', type=str)
    parser.add_argument('-a', '--alpha', default=0.99, type=float)

    args = parser.parse_args()
    alpha = args.alpha

    vz = VzLog(args.output)
    vz.title(args.title)
    vz.log('alpha =', alpha)

    mms = []
    for fn in args.model:
        mm = caffe.proto.caffe_pb2.NetParameter()
        with open(fn, 'rb') as f:
            mm.ParseFromString(f.read())
        mms.append(mm)

    layers = args.layers
    plt.figure()
    for fn in args.responses:
        data = dd.io.load(fn)
        name = data['name']
        if layers is None:
            layers = data['layers']
        y = []
        ystd = []
        for l in layers:
            rs = []
            #for X in data['responses'][l]:
            X = data['responses'][l]
            C = np.corrcoef(X.T)
            print(l, X.shape)
            C[np.isnan(C)] = 0.0
            try:
                rs.append(np.where(np.sort(np.linalg.eigvals(C))[::-1].cumsum() / C.shape[0] > alpha)[0][0] / C.shape[0])
            except:
                break

            y.append(np.mean(rs))
            ystd.append(np.std(rs))
        plt.errorbar(np.arange(len(y)), y, yerr=ystd, label='{}'.format(name))
        plt.xticks(np.arange(len(y)), layers)
    plt.ylabel('<- Redundancy / Identity-like ->')
    plt.legend(loc=4)
    plt.ylim((0, 1))
    plt.savefig(vz.impath('svg'))
    plt.close()

    plt.figure()
    for fn in args.responses:
        data = dd.io.load(fn)
        name = data['name']
        if layers is None:
            layers = data['layers']
        y = []
        ystd = []
        for l in layers:
            rs = []
            #for X in data['responses'][l]:
            X = data['responses'][l]

            y.append(X.mean())
        plt.plot(np.arange(len(y)), y, label='{}'.format(name))
        plt.xticks(np.arange(len(y)), layers)
    plt.ylabel('Mean')
    plt.legend(loc=4)
    plt.savefig(vz.impath('svg'))
    plt.close()

    plt.figure()
    for fn in args.responses:
        data = dd.io.load(fn)
        name = data['name']
        if layers is None:
            layers = data['layers']
        y = []
        ystd = []
        for l in layers:
            rs = []
            #for X in data['responses'][l]:
            X = data['responses'][l]

            y.append((X**2).mean())
        plt.plot(np.arange(len(y)), y, label='{}'.format(name))
        plt.xticks(np.arange(len(y)), layers)
    plt.ylabel('Second moment')
    plt.ylim((0, None))
    plt.legend(loc=4)
    plt.savefig(vz.impath('svg'))
    plt.close()

    plt.figure()
    for fn in args.responses:
        data = dd.io.load(fn)
        name = data['name']
        if layers is None:
            layers = data['layers']
        y = []
        ystd = []
        for l in layers:
            rs = []
            #for X in data['responses'][l]:
            X = data['responses'][l]

            y.append(X.std())
        plt.plot(np.arange(len(y)), y, label='{}'.format(name))
        plt.xticks(np.arange(len(y)), layers)
    plt.ylabel('Standard deviation')
    plt.ylim((0, None))
    plt.legend(loc=4)
    plt.savefig(vz.impath('svg'))
    plt.close()

    plt.figure()
    for mm in mms:
        y = []
        for l in layers:
            blobs = get_blobs(mm, l)
            y.append(blobs[0].mean())

        plt.plot(np.arange(len(y)), y, label='{}'.format(name))
        plt.xticks(np.arange(len(y)), layers)
    plt.ylabel('Weight mean')
    plt.legend(loc=1)
    plt.savefig(vz.impath('svg'))
    plt.close()


    plt.figure()
    for mm in mms:
        y = []
        for l in layers:
            blobs = get_blobs(mm, l)
            y.append(blobs[0].std())

        plt.plot(np.arange(len(y)), y, label='{}'.format(name))
        plt.xticks(np.arange(len(y)), layers)
    plt.ylabel('Weight s.d.')
    plt.legend(loc=1)
    plt.savefig(vz.impath('svg'))
    plt.close()


    plt.figure()
    for mm in mms:
        y = []
        y2 = []
        for l in layers:
            blobs = get_blobs(mm, l)
            b0 = blobs[0]
            print(l, blobs[0].shape)
            if l.startswith('conv'):
                N = b0.shape[0] * b0.shape[2] * b0.shape[3]
                M = b0.shape[1] * b0.shape[2] * b0.shape[3]
            else:
                N = b0.shape[2]
                M = b0.shape[3]
            y.append(N)
            y2.append(M)

        plt.plot(np.arange(len(y)), y, label='n={}'.format(name))
        plt.plot(np.arange(len(y2)), y2, label='m={}'.format(name))
        plt.xticks(np.arange(len(y)), layers)
    plt.ylabel('Size')
    plt.legend(loc=1)
    plt.savefig(vz.impath('svg'))
    plt.close()