Exemple #1
0
def plotCost(fname, train=None, valid=None, test=None,
             train_label='Train', test_label='Test'):
    ''' Plot a dual axis plot that shows training costs and validation
        accuracy superimposed. '''
    fig, ax1 = plt.subplots()
    ax1.set_xlabel('Epoch')

    if train is not None:
        if len(train) < 60:
            ax1.plot(train, 'bo-')
        else:
            ax1.plot(train, 'b-')
        ax1.set_ylabel(train_label)

    if valid is not None:
        valid_x = np.linspace(0,len(train)-1,len(valid))
        if len(valid) < 60:
            ax1.plot(valid_x, valid, 'go-')
        else:
            ax1.plot(valid_x, valid, 'g-')

    if test is not None:
        ax2 = ax1.twinx()
        test_x = np.linspace(0,len(train)-1,len(test))
        if len(test) < 60:
            ax2.plot(test_x, test, 'ro-')
        else:
            ax2.plot(test_x, test, 'r-')
        ax2.set_ylabel(test_label, color='r')
        for tl in ax2.get_yticklabels():
            tl.set_color('r')

    plt.savefig(fname, bbox_inches='tight')
    gfx.render(fname)
    plt.close()
Exemple #2
0
def make_filter_fig(fname, filters, filter_start=0, num_filters=16*16, 
                    _title='', combine_chans=False):
    ''' 
    Adapated from cuda-convnet
    fname: filename to save to
    filters: the weights - a 2-3 Tensor: [colors][from weights][to weights]
    filter_start: number of the filter to visualize first
    num_filters: number of filters to visualize, capped at 16*16
    _title: figure title
    combine_chans: combine rgb channels
    '''

    if len(filters.shape) == 2:
        filters = np.expand_dims(filters, 0)

    FILTERS_PER_ROW = 16
    MAX_ROWS = 16
    MAX_FILTERS = min(FILTERS_PER_ROW * MAX_ROWS, filters.shape[2])
    num_colors = filters.shape[0]
    f_per_row = int(np.ceil(FILTERS_PER_ROW / float(1 if combine_chans else num_colors)))
    filter_end = min(filter_start+MAX_FILTERS, num_filters)
    filter_rows = int(np.ceil(float(filter_end - filter_start) / f_per_row))

    filter_size = int(np.sqrt(filters.shape[1]))
    fig = plt.figure()
    fig.text(.5, .95, '%s %dx%d filters %d-%d' % (_title, filter_size, filter_size, filter_start, filter_end-1), horizontalalignment='center') 
    num_filters = filter_end - filter_start
    if not combine_chans:
        bigpic = np.zeros((filter_size * filter_rows + filter_rows + 1,
                           filter_size*num_colors * f_per_row + f_per_row + 1),
                          dtype=np.single)
    else:
        bigpic = np.zeros((3, filter_size * filter_rows + filter_rows + 1,
                           filter_size * f_per_row + f_per_row + 1),
                          dtype=np.single)

    for m in xrange(filter_start,filter_end):
        filter = filters[:,:,m]
        y, x = (m - filter_start) / f_per_row, (m - filter_start) % f_per_row
        if not combine_chans:
            for c in xrange(num_colors):
                filter_pic = filter[c,:].reshape((filter_size,filter_size))
                bigpic[1 + (1 + filter_size) * y:1 + (1 + filter_size) * y + filter_size,
                       1 + (1 + filter_size*num_colors) * x + filter_size*c:1 + (1 + filter_size*num_colors) * x + filter_size*(c+1)] = filter_pic
        else:
            filter_pic = filter.reshape((3, filter_size,filter_size))
            bigpic[:,
                   1 + (1 + filter_size) * y:1 + (1 + filter_size) * y + filter_size,
                   1 + (1 + filter_size) * x:1 + (1 + filter_size) * x + filter_size] = filter_pic

    plt.xticks([])
    plt.yticks([])
    if not combine_chans:
        plt.imsave(fname, bigpic, cmap=plt.cm.gray)#, interpolation='nearest')
    else:
        bigpic = bigpic.swapaxes(0,2).swapaxes(0,1)
        plt.imsave(fname, bigpic) #, interpolation='nearest')
    gfx.render(fname)
    plt.close()
Exemple #3
0
def plot_confusion_matrix(fname, y_true, y_pred, labels=None):
    ''' Plots a confusion matrix. '''
    from sklearn.metrics import confusion_matrix

    cm = confusion_matrix(y_true, y_pred, labels)
    cm = np.repeat(np.repeat(cm, 20, axis=0), 20, axis=1)

    plt.ylabel('True Label')
    plt.xlabel('Predicted Label')
    plt.imsave(fname, cm)
    gfx.render(fname)
    plt.close()
Exemple #4
0
def plot_confusion_matrix(fname, y_true, y_pred, labels=None):
    ''' Plots a confusion matrix. '''
    from sklearn.metrics import confusion_matrix

    cm = confusion_matrix(y_true, y_pred, labels)
    cm = np.repeat(np.repeat(cm, 20, axis=0), 20, axis=1)

    plt.ylabel('True Label')
    plt.xlabel('Predicted Label')
    plt.imsave(fname, cm)
    gfx.render(fname)
    plt.close()
Exemple #5
0
def plotCost(fname,
             train=None,
             valid=None,
             test=None,
             train_label='Train',
             test_label='Test'):
    ''' Plot a dual axis plot that shows training costs and validation
        accuracy superimposed. '''
    fig, ax1 = plt.subplots()
    ax1.set_xlabel('Epoch')

    if train is not None:
        if len(train) < 60:
            ax1.plot(train, 'bo-')
        else:
            ax1.plot(train, 'b-')
        ax1.set_ylabel(train_label)

    if valid is not None:
        valid_x = np.linspace(0, len(train) - 1, len(valid))
        if len(valid) < 60:
            ax1.plot(valid_x, valid, 'go-')
        else:
            ax1.plot(valid_x, valid, 'g-')

    if test is not None:
        ax2 = ax1.twinx()
        test_x = np.linspace(0, len(train) - 1, len(test))
        if len(test) < 60:
            ax2.plot(test_x, test, 'ro-')
        else:
            ax2.plot(test_x, test, 'r-')
        ax2.set_ylabel(test_label, color='r')
        for tl in ax2.get_yticklabels():
            tl.set_color('r')

    plt.savefig(fname, bbox_inches='tight')
    gfx.render(fname)
    plt.close()
Exemple #6
0
def make_filter_fig(fname,
                    filters,
                    filter_start=0,
                    num_filters=16 * 16,
                    _title='',
                    combine_chans=False):
    ''' 
    Adapated from cuda-convnet
    fname: filename to save to
    filters: the weights - a 2-3 Tensor: [colors][from weights][to weights]
    filter_start: number of the filter to visualize first
    num_filters: number of filters to visualize, capped at 16*16
    _title: figure title
    combine_chans: combine rgb channels
    '''

    if len(filters.shape) == 2:
        filters = np.expand_dims(filters, 0)

    FILTERS_PER_ROW = 16
    MAX_ROWS = 16
    MAX_FILTERS = min(FILTERS_PER_ROW * MAX_ROWS, filters.shape[2])
    num_colors = filters.shape[0]
    f_per_row = int(
        np.ceil(FILTERS_PER_ROW / float(1 if combine_chans else num_colors)))
    filter_end = min(filter_start + MAX_FILTERS, num_filters)
    filter_rows = int(np.ceil(float(filter_end - filter_start) / f_per_row))

    filter_size = int(np.sqrt(filters.shape[1]))
    fig = plt.figure()
    fig.text(.5,
             .95,
             '%s %dx%d filters %d-%d' %
             (_title, filter_size, filter_size, filter_start, filter_end - 1),
             horizontalalignment='center')
    num_filters = filter_end - filter_start
    if not combine_chans:
        bigpic = np.zeros(
            (filter_size * filter_rows + filter_rows + 1,
             filter_size * num_colors * f_per_row + f_per_row + 1),
            dtype=np.single)
    else:
        bigpic = np.zeros((3, filter_size * filter_rows + filter_rows + 1,
                           filter_size * f_per_row + f_per_row + 1),
                          dtype=np.single)

    for m in xrange(filter_start, filter_end):
        filter = filters[:, :, m]
        y, x = (m - filter_start) / f_per_row, (m - filter_start) % f_per_row
        if not combine_chans:
            for c in xrange(num_colors):
                filter_pic = filter[c, :].reshape((filter_size, filter_size))
                bigpic[1 + (1 + filter_size) * y:1 + (1 + filter_size) * y +
                       filter_size, 1 + (1 + filter_size * num_colors) * x +
                       filter_size * c:1 + (1 + filter_size * num_colors) * x +
                       filter_size * (c + 1)] = filter_pic
        else:
            filter_pic = filter.reshape((3, filter_size, filter_size))
            bigpic[:, 1 + (1 + filter_size) * y:1 + (1 + filter_size) * y +
                   filter_size, 1 + (1 + filter_size) * x:1 +
                   (1 + filter_size) * x + filter_size] = filter_pic

    plt.xticks([])
    plt.yticks([])
    if not combine_chans:
        plt.imsave(fname, bigpic,
                   cmap=plt.cm.gray)  #, interpolation='nearest')
    else:
        bigpic = bigpic.swapaxes(0, 2).swapaxes(0, 1)
        plt.imsave(fname, bigpic)  #, interpolation='nearest')
    gfx.render(fname)
    plt.close()