Пример #1
0
    def __init__(self, env, params):
        self.env = env
        params.actions = env.actions()
        self.num_actions = env.actions()
        self.episodes = params.episodes
        self.steps = params.steps
        self.train_steps = params.train_steps
        self.update_freq = params.update_freq
        self.save_weights = params.save_weights
        self.history_length = params.history_length
        self.discount = params.discount
        self.eps = params.init_eps
        self.eps_delta = (params.init_eps - params.final_eps) / params.final_eps_frame
        self.replay_start_size = params.replay_start_size
        self.eps_endt = params.final_eps_frame
        self.random_starts = params.random_starts
        self.batch_size = params.batch_size
        self.ckpt_file = params.ckpt_dir+'/'+params.game

        self.global_step = tf.Variable(0, trainable=False)
        if params.lr_anneal:
            self.lr = tf.train.exponential_decay(params.lr, self.global_step, params.lr_anneal, 0.96, staircase=True)
        else:
            self.lr = params.lr

        self.buffer = Buffer(params)
        self.memory = Memory(params.size, self.batch_size)

        with tf.variable_scope("train") as self.train_scope:
            self.train_net = ConvNet(params, trainable=True)
        with tf.variable_scope("target") as self.target_scope:
            self.target_net = ConvNet(params, trainable=False)

        self.optimizer = tf.train.RMSPropOptimizer(self.lr, params.decay_rate, 0.0, self.eps)

        self.actions = tf.placeholder(tf.float32, [None, self.num_actions])
        self.q_target = tf.placeholder(tf.float32, [None])
        self.q_train = tf.reduce_max(tf.mul(self.train_net.y, self.actions), reduction_indices=1)
        self.diff = tf.sub(self.q_target, self.q_train)

        half = tf.constant(0.5)
        if params.clip_delta > 0:
            abs_diff = tf.abs(self.diff)
            clipped_diff = tf.clip_by_value(abs_diff, 0, 1)
            linear_part = abs_diff - clipped_diff
            quadratic_part = tf.square(clipped_diff)
            self.diff_square = tf.mul(half, tf.add(quadratic_part, linear_part))
        else:
            self.diff_square = tf.mul(half, tf.square(self.diff))

        if params.accumulator == 'sum':
            self.loss = tf.reduce_sum(self.diff_square)
        else:
            self.loss = tf.reduce_mean(self.diff_square)

        # backprop with RMS loss
        self.task = self.optimizer.minimize(self.loss, global_step=self.global_step)
Пример #2
0
def run_experiment(algo, average_gradients, batch_size, iterations, verbose):
    batch_size = batch_size
    tf.reset_default_graph()
    net = ConvNet()

    validation_batch = mnist.test.images
    val_count = validation_batch.shape[0]
    validation_batch = np.reshape(validation_batch, (val_count, 28, 28, 1))
    validation_labels = mnist.test.labels

    net.setup_train(algo, average_gradients=average_gradients)
    training_log = []
    listloss = []
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        for i in range(iterations):
            batch = mnist.train.next_batch(batch_size)
            input_batch = np.reshape(batch[0], (batch_size, 28, 28, 1))
            loss = net.train(sess, input_batch, batch[1])
            listloss.append(loss)
            if (i + 1) % 100 == 0:
                accuracy = net.evaluate(sess, validation_batch,
                                        validation_labels)
                training_log.append((accuracy, i + 1))
                if verbose:
                    print('[{:d}/{:d}] loss: {:.3g}, accuracy: {:.3g}%'.format(
                        i + 1, iterations, loss, accuracy))
        accuracy = net.evaluate(sess, validation_batch, validation_labels)
        training_log.append((accuracy, iterations))
        best = sorted(training_log, key=lambda x: x[0], reverse=True)[0]
        print('Training finished. Best accuracy: {:.3g} at iteration {:d}.'.
              format(best[0], best[1]))
        return listloss
Пример #3
0
def main():
    jsonResponse = json.loads(request.data.decode('utf-8'))
    image = jsonResponse['image']
    png_recovered = base64.decodestring(image.split(',')[1])
    f = open("temp.png","w")
    f.write(png_recovered)
    f.close()
    tab = cv2.bitwise_not(cv2.imread("temp.png",0))
    new = cv2.resize (tab, (imsize,imsize))
    cv2.imwrite("visu.png",new)
    
    json_file = open('model.json','r')
    loaded_model_json = json_file.read()
    json_file.close()
    loaded_model = model_from_json(loaded_model_json)

    loaded_model.load_weights("model.h5")

    reseau = ConvNet(imsize,imsize)
    reseau.model = loaded_model
    
    response = flask.jsonify({
        'number': reseau.prediction(new),
        'image': jsonResponse['image']
    })
    K.clear_session()
    
    return response
Пример #4
0
def encoder_convnet(input_shape, dimH, dimZ, dimY, n_channel, dropout, name):

    # encoder for z (low res)
    layer_channels = [n_channel for i in range(3)]
    filter_width = 5
    filter_shapes = construct_filter_shapes(layer_channels, filter_width)
    fc_layer_sizes = [dimH]
    enc_conv, conv_output_shape = ConvNet(name+'_conv', input_shape, filter_shapes, \
                                     fc_layer_sizes, 'relu',
                                     last_activation = 'relu',
                                     dropout = dropout)
    print('encoder shared Conv net ' + ' network architecture:', \
            conv_output_shape, fc_layer_sizes)

    fc_layer = [dimH + dimY, dimH, dimZ]
    enc_mlp = []
    for i in range(len(fc_layer) - 1):
        if i + 2 < len(fc_layer):
            activation = 'relu'
        else:
            activation = 'linear'
        name_layer = name + '_mlp_l%d' % i
        enc_mlp.append(
            mlp_layer(fc_layer[i], fc_layer[i + 1], activation, name_layer))

    def apply_conv(x):
        return enc_conv(x)

    def apply_mlp(x, y):
        out = tf.concat([x, y], 1)
        for layer in enc_mlp:
            out = layer(out)
        return out

    return apply_conv, apply_mlp
Пример #5
0
def construct_model(input_shape, dimZ, dimF, dimH, batch_norm=False):
    # test dropout model to start with
    # construct encoder
    weight_init = 'glorot_normal'
    layer_channels = [32, 64, 64]
    filter_width = 3
    filter_shapes = construct_filter_shapes(layer_channels, filter_width)
    fc_layer_sizes = [dimH, dimF]
    enc, conv_output_shape = ConvNet('encoder_conv', input_shape, filter_shapes, fc_layer_sizes, \
                                     'relu', batch_norm, last_activation = 'relu', \
                                     dropout = False)
    print 'encoder' + ' network architecture:', \
            conv_output_shape, fc_layer_sizes

    # construct the decoder
    batch_size_ph = tf.placeholder(tf.int32, shape=(), name='batch_size_ph')
    dec = DeConvNet(input_shape,
                    dimH,
                    dimF,
                    last_activation='sigmoid',
                    name='decoder')

    # construct the generator
    generator = DeConvNet(input_shape,
                          dimH,
                          dimF,
                          last_activation='sigmoid',
                          name='generator')

    def gen(z):
        N = z.get_shape().as_list()[0]
        x = generator(z)
        return tf.reshape(x, (N, ) + input_shape)

    return enc, dec, gen, batch_size_ph
Пример #6
0
def make_model(cfg):
    if cfg['model_name'] in convnet_names:
        return ConvNet(cfg)
    elif cfg['model_name'] == 'dndf':
        return DNDF(cfg)
    else:
        raise NotImplementedError
Пример #7
0
def main():
	net = ConvNet()
	net.cuda()
	optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) #SGD with momentum

	classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
	# load snapshot
	snapshot = torch.load('./convnet_CIFAR10_snapshot/snapshot2_12000')
	net.load_state_dict(snapshot['state_dict'])
	optimizer.load_state_dict(snapshot['optimizer'])
	
	data_loader = load_data('./CIFAR10_data') 

	image_num = random.randint(0,len(data_loader.dataset)-1)
	img = np.transpose(data_loader.dataset[image_num][0].numpy(2,0,1))
	img = np.rot90(img,k=3)
	img = img / 2 + 0.5     # unnormalize
	print(classes[data_loader.dataset[image_num][1]])
	plt.imshow(img)
	plt.title('image: %d, %s' % (image_num, str(classes[data_loader.dataset[image_num][1]])))
	plt.axis('off')
	# plt.show()

	img_size = data_loader.dataset[image_num][0].size()
	input = torch.FloatTensor(1, img_size[0], img_size[1],img_size[2]).zero_()
	input[0,:] = data_loader.dataset[image_num][0]

	output = net(Variable(input.cuda()))
	print(output)
	_, predicted = torch.max(output.data, 1)
	print('Predicted: %s' % classes[predicted[0][0]]) # remind that the input has a 4D dimension (batch, channel, width, height)
Пример #8
0
def generate_model(model_name):
    if model_name == 'conv_net':
        return ConvNet()
    if model_name == 'conv_dropout_net':
        return ConvDropoutNet()
    # if model_name == 'conv_drop_batch_norm_net':
    #     return ConvDropBatchNormNet()
    raise Exception()
Пример #9
0
def main(settings):
    convnet = ConvNet(settings)
    train = ConvNetTrain(convnet, settings)
    train.train()
    model_path = settings['model_path']
    train.save_model(model_path)
    summary = train.summary()
    print(summary)
    summary.to_csv("{}_summary.csv".format(os.path.splitext(model_path)[0]))
def making_diagnosis(convnet_settings,
                     img_path,
                     score_thresh=0.97,
                     infection_threshold=5,
                     inflammation_threshold=5,
                     highlight=False):
    print(img_path)
    img = cv2.imread(img_path)

    # select blood cells
    detector = BloodCellDetector('', '')
    detector.img = img
    detector.find_cells()

    # print("Found {} blood cell".format(len(detector.cells_images)))

    # classify the founded blood cells
    convnet = ConvNet(convnet_settings)
    convnet.load_model(convnet_settings['model_path'])
    lymph_count = 0
    neutr_count = 0
    total_count = 0
    for cell_img in tqdm(detector.cells_images, ncols=100):
        total_count += 1
        prediction, scores = convnet.predict(cell_img, with_scores=True)
        if max(scores) >= score_thresh:
            if prediction == 1:
                lymph_count += 1
            elif prediction == 2:
                neutr_count += 1

    print("{} lymphocytes and {} neutrophils were found among {} blood cells".
          format(lymph_count, neutr_count, total_count))

    # making diagnosis
    if neutr_count > infection_threshold:
        diagnosis = 'infection'
    elif lymph_count > inflammation_threshold:
        diagnosis = 'inflammation'
    else:
        diagnosis = 'bening'

    if highlight:
        visualizer = BloodCellVisualizer(detector, convnet)
        result_img = visualizer.highlight_cells(
            img,
            labels=['1-lymphocytes', '2-neutrophils'],
            show_scores=False,
            make_zoom=True)
        output_path = '{}_diagnosis_{}{}'.format(
            os.path.splitext(img_path)[0], diagnosis,
            os.path.splitext(img_path)[1])
        cv2.imwrite(output_path, result_img)
        print('File "{}" was created.'.format(output_path))

    return neutr_count, diagnosis
def generator(input_shape, dimH, dimZ, dimY, n_channel, last_activation, name):

    # first construct p(y|z)
    fc_layers = [dimZ, dimH, dimY]
    pyz_mlp_layers = []
    N_layers = len(fc_layers) - 1
    l = 0
    for i in range(N_layers):
        name_layer = name + '_pyz_mlp_l%d' % l
        if i + 1 == N_layers:
            activation = 'linear'
        else:
            activation = 'relu'
        pyz_mlp_layers.append(
            mlp_layer(fc_layers[i], fc_layers[i + 1], activation, name_layer))

    def pyz_params(z):
        out = z
        for layer in pyz_mlp_layers:
            out = layer(out)
        return out

    # now construct p(z|x)
    # encoder for z (low res)
    layer_channels = [n_channel for i in range(3)]
    filter_width = 5
    filter_shapes = construct_filter_shapes(layer_channels, filter_width)
    fc_layer_sizes = [dimH]
    gen_conv2, conv_output_shape = ConvNet(name+'_pzx_conv', input_shape, filter_shapes, \
                                     fc_layer_sizes, 'relu',
                                     last_activation = 'relu')
    print('generator shared Conv net ' + ' network architecture:', \
            conv_output_shape, fc_layer_sizes)

    fc_layers = [dimH, dimH, dimZ * 2]
    pzx_mlp_layers = []
    N_layers = len(fc_layers) - 1
    l = 0
    for i in range(N_layers):
        name_layer = name + '_pzx_mlp_l%d' % l
        if i + 1 == N_layers:
            activation = 'linear'
        else:
            activation = 'relu'
        pzx_mlp_layers.append(
            mlp_layer(fc_layers[i], fc_layers[i + 1], activation, name_layer))

    def pzx_params(x):
        out = gen_conv2(x)
        for layer in pzx_mlp_layers:
            out = layer(out)
        mu, log_sig = tf.split(out, 2, axis=1)
        return mu, log_sig

    return pyz_params, pzx_params
def main(settings):
    convnet = ConvNet(settings)
    train = ConvNetTrain(convnet, settings)
    # for num in tqdm(range(1, 11)):
    for num in range(10, 11):
        ratio = num / 10
        train.train(ratio=ratio)
        model_path = settings['model_path'] + '_{}'.format(int(ratio*100))
        train.save_model(model_path)
        summary = train.summary()
        print(summary)
        summary.to_csv("{}_summary.csv".format(os.path.splitext(model_path)[0]))
    def make_diagnosis(self, convnet_settings):
        start_time = time.time()
        print(
            '\033[94m* making diagnosis is in progress. Please wait...\033[0m')
        image_diagnoses = []
        for img_name in os.listdir(os.path.join(self.work_dir, 'images')):
            if not img_name.startswith('.'):
                diagnosis = making_diagnosis(
                    convnet_settings,
                    os.path.join(self.work_dir, 'images', img_name))
                image_diagnoses.append((img_name, diagnosis))

        detector = BloodCellDetector('', '')
        convnet = ConvNet(convnet_settings)

        convnet.load_model(convnet_settings['model_path'])
        visualizer = BloodCellVisualizer(detector, convnet)

        image_diagnoses.sort(key=lambda x: x[1][0])
        image_diagnoses = image_diagnoses[::-1]

        cnt = 0
        for img_info in image_diagnoses[:self.top]:
            if img_info[1][1] == 'infection':
                img = cv2.imread(
                    os.path.join(self.work_dir, 'images', img_info[0]))
                result_img = visualizer.highlight_cells(
                    img,
                    labels=['1-lymphocytes', '2-neutrophils'],
                    show_scores=False,
                    make_zoom=False)
                cv2.imwrite(
                    os.path.join(self.work_dir, 'marked' + img_info[0]),
                    result_img)
                cnt += 1

        print(
            '\033[92m* {} with selected neutrophil images are created in the "{}"\033[0m'
            .format(cnt, self.work_dir))
        print('\033[92m* making diagnosis was completed in {:.2f} (s)\033[0m'.
              format(time.time() - start_time))

        diagnoses = [d[1][1] for d in image_diagnoses]
        if 'infection' in diagnoses:
            total_diagnosis = 'infection'
        elif 'inflammation' in diagnoses:
            total_diagnosis = 'inflammation'
        else:
            total_diagnosis = 'bening'

        return image_diagnoses, total_diagnosis
Пример #14
0
    def __init__(self, feat_extract_name , n_processes, low_pass, high_pass, gauss_noise, roi, size_percentage,\
                 feature_extractor__shape_norm, feature_extractor__shape_conv, \
                 feature_extractor__shape_pool, feature_extractor__n_filters, \
                 feature_extractor__stride_pool, feature_extractor__stoc_pool, \
                 feature_extractor__div_norm, feature_extractor__region_shape, \
                 feature_extractor__region_stride, feature_extractor__top_regions, \
                 feature_extractor__stride_pool_recurrent, feature_extractor__analysis_shape, \
                 feature_extractor__method, \
                 feature_extractor__n_tiles, augmentation, multi_column, aug_rotate \
                 ):
        self.low_pass = low_pass
        self.high_pass = high_pass
        self.gauss_noise = gauss_noise
        self.roi = roi
        self.size_percentage = size_percentage
        self.augmentation = augmentation
        self.aug_rotate = aug_rotate
        self.multi_column = multi_column
        self.feat_extract_name = feat_extract_name
        self.n_processes = n_processes

        if feat_extract_name.lower() == 'convnet':
            self.feature_extractor = eval(feat_extract_name + '()')
            self.feature_extractor.n_filters = feature_extractor__n_filters
            self.feature_extractor.shape_norm = feature_extractor__shape_norm
            self.feature_extractor.shape_conv = feature_extractor__shape_conv
            self.feature_extractor.shape_pool = feature_extractor__shape_pool
            self.feature_extractor.stride_pool = feature_extractor__stride_pool
            self.feature_extractor.div_norm = feature_extractor__div_norm
            self.feature_extractor.stoc_pool = feature_extractor__stoc_pool
        elif feat_extract_name.lower() == 'mrrconvnet':
            self.feature_extractor = eval(feat_extract_name + '()')
            convnet = ConvNet()
            convnet.n_filters = feature_extractor__n_filters
            convnet.shape_norm = feature_extractor__shape_norm
            convnet.shape_conv = feature_extractor__shape_conv
            convnet.shape_pool = feature_extractor__shape_pool
            convnet.stride_pool = feature_extractor__stride_pool
            convnet.div_norm = feature_extractor__div_norm
            convnet.stoc_pool = feature_extractor__stoc_pool
            self.feature_extractor.convnet = convnet
            self.feature_extractor.region_shape = feature_extractor__region_shape
            self.feature_extractor.region_stride = feature_extractor__region_stride
            self.feature_extractor.top_regions = feature_extractor__top_regions
            self.feature_extractor.stride_pool_recurrent = feature_extractor__stride_pool_recurrent
            self.feature_extractor.analysis_shape = feature_extractor__analysis_shape

        elif feat_extract_name.lower() == 'lbp':
            self.feature_extractor = eval(feat_extract_name + '()')
            self.feature_extractor.method = feature_extractor__method
            self.feature_extractor.n_tiles = feature_extractor__n_tiles
Пример #15
0
 def build_image_embedding(self):
     print('\tBuild image embedding')
     with tf.variable_scope('ConvNet') as scope:
         convnet = ConvNet(self.config, self.mode)
         cnn_output = convnet.build_model(self.images)
     with tf.variable_scope('IcestateEmbedding') as scope:
         image_embeddings = tf.contrib.layers.fully_connected(
             inputs=cnn_output,
             num_outputs=self.config.feature_dims,
             activation_fn=None,
             weights_initializer=self.initializer,
             biases_initializer=None,
             scope=scope)
     tf.constant(self.config.embedding_size, name="embedding_size")
     self.image_embeddings = image_embeddings
Пример #16
0
def training(settings):
    print('Training Model')
    for (num_epochs, learning_rate) in settings:
        mnist = get_data()
        eval_mnist = get_data()
        x_train = np.reshape(mnist.train.images, [-1, 1, 28, 28])
        y_train = mnist.train.labels
        x_test = np.reshape(mnist.test.images, [-1, 1, 28, 28])
        y_test = mnist.test.labels
        test_accuracy, train_accuracy = ConvNet(x_train, y_train, x_test,
                                                y_test, num_epochs, batch_size,
                                                learning_rate,
                                                log_period_samples)
        experiments_list.append(
            ((num_epochs, learning_rate), train_accuracy, test_accuracy))
        print(experiments_list)
Пример #17
0
def fit(data, filter_sizes, out_channels, strides, paddings,
        smooth_weights, sparse_weights, readout_sparse_weight,
        learning_rate=0.001, max_iter=10000, val_steps=50,
        early_stopping_steps=10):
    '''Fit CNN model.
    
    Parameters:
        data:                  Dataset object (see load_data())
        filter_sizes:          Filter sizes (list containing one number per conv layer)
        out_channels:          Number of output channels (list; one number per conv layer)
        strides:               Strides (list; one number per conv layer)
        paddings:              Paddings (list; one number per conv layer; VALID|SAME)
        smooth_weights:        Weights for smoothness regularizer (list; one number per conv layer)
        sparse_weights:        Weights for group sparsity regularizer (list; one number per conv layer)
        readout_sparse_weight: Sparisty of readout weights (scalar)
        learning_rate:         Learning rate (default: 0.001)   
        max_iter:              Max. number of iterations (default: 10000)
        val_steps:             Validation interval (number of iterations; default: 50)
        early_stopping_steps:  Tolerance for early stopping. Will stop optimizing 
            after this number of validation steps without decrease of loss.

    Output:
        cnn:                   A fitted ConvNet object
    '''
    cnn = ConvNet(data, log_dir='cnn', log_hash='manual')
    cnn.build(filter_sizes=filter_sizes,
              out_channels=out_channels,
              strides=strides,
              paddings=paddings,
              smooth_weights=smooth_weights,
              sparse_weights=sparse_weights,
              readout_sparse_weight=readout_sparse_weight)
    for lr_decay in range(3):
        training = cnn.train(max_iter=max_iter,
                             val_steps=val_steps,
                             early_stopping_steps=early_stopping_steps,
                             learning_rate=learning_rate)
        for (i, (logl, readout_sparse, conv_sparse, smooth, total_loss, pred)) in training:
            print('Step %d | Loss: %.2f | Poisson: %.2f | L1 readout: %.2f | Sparse: %.2f | Smooth: %.2f | Var(y): %.3f' % \
                  (i, total_loss, logl, readout_sparse, conv_sparse, smooth, np.mean(np.var(pred, axis=0))))
        learning_rate /= 3
        print('Reducing learning rate to %f' % learning_rate)
    print('Done fitting')
    return cnn
Пример #18
0
def main(_):
    config = Config()

    print "Initializing Convolutional Neural Network...\n"
    cnn = ConvNet(256,256)

    print "Initializing Image Segmentation Model...\n"
    model = ImageSegmentation(config, cnn)

    print "Retrieving data from pipeline...\n"
    data = create_data_pipeline()


    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())

        print "Beginning to train model\n"
        train_loss = model.train(sess, data, 'train_dir', 2)

    print "Finished"
    def find_pathology(self, convnet_settings):
        detection = ConvNet(convnet_settings)
        detection.load_model(convnet_settings['model_path'])
        pathology_images = []
        for img_name in tqdm(os.listdir(self.imgs_directory), ncols=80):
            if '.jpeg' not in img_name:
                continue
            img = cv2.imread(os.path.join(self.imgs_directory, img_name))
            img = misc.imresize(arr=img, size=(detection.img_size, detection.img_size, 3))
            img_arr = np.asarray([img])
            prediction = detection.model.predict(img_arr)[0][0]
            if int(prediction) == 0:
                pathology_images.append((img_name, prediction))

        pathology_images = np.asarray(pathology_images)
        pathology_images = pathology_images[pathology_images[:, 1].argsort()]

        pathology_images = pathology_images[::-1]
        pathology_images = [img_name for img_name, _ in pathology_images]

        return pathology_images[:self.top]
Пример #20
0
def train_proc(network, **kwargs):
    log_path = os.path.join(save_dir, network.checkpoint_name() + '.log')
    real_stdout = sys.stdout
    sys.stdout = open(log_path, 'w')
    convnet = None
    try:
        from convnet import ConvNet
        np.random.seed(network.seed)
        op, load_dic = network.get_op(**kwargs)
        convnet = ConvNet(op, load_dic)
        convnet.train()
        return True
    except RuntimeError:
        print(traceback.format_exc())
        if convnet:
            print("\nerrored at epoch %d" % (convnet.epoch))
    except:
        print(traceback.format_exc())
    finally:
        if convnet:
            convnet.destroy_model_lib()

        reset_std('out', real_stdout)
Пример #21
0
def main():
    # Training settings
    parser = argparse.ArgumentParser(
        description='Obtain confidence scores from trained networks')
    parser.add_argument('--test-batch-size',
                        type=int,
                        default=200,
                        metavar='N',
                        help='input batch size for testing (default: 200)')
    parser.add_argument('--no-cuda',
                        action='store_true',
                        default=False,
                        help='disables CUDA training')
    parser.add_argument('--seed',
                        type=int,
                        default=1,
                        metavar='S',
                        help='random seed (default: 1)')

    parser.add_argument('--arch',
                        type=str,
                        default='wrn',
                        metavar='ARC',
                        help='neural network arch')
    parser.add_argument('--data',
                        type=str,
                        default='cifar10',
                        metavar='DT',
                        help='dataset the classifier was trained with')
    parser.add_argument('--test-data',
                        type=str,
                        default='fakedata',
                        metavar='DT',
                        help='dataset used to test the classifier')
    parser.add_argument('--lsun-path', type=str, help='path to LSUN dataset')
    parser.add_argument('--save_path',
                        type=str,
                        default='data',
                        metavar='SP',
                        help='path to save the produced confidence')

    parser.add_argument('--print-time',
                        type=bool,
                        default=False,
                        metavar='PT',
                        help='print elapsed time per batch')
    parser.add_argument(
        '--mode',
        type=str,
        default='msp',
        metavar='M',
        help=
        'available modes: msp (maximum softmax probability), tmsp (t-softmax msp), tmsp0.5, tmsp5, tmsp10 (where number indicates nu value) odin. default: msp'
    )
    parser.add_argument('--T',
                        type=float,
                        default=1000.0,
                        metavar='T',
                        help='ODIN temperature scaling')
    parser.add_argument('--eps',
                        type=float,
                        default=0.001,
                        metavar='EPS',
                        help='ODIN epsilon value')

    args = parser.parse_args()
    use_cuda = not args.no_cuda and torch.cuda.is_available()

    device = torch.device("cuda" if use_cuda else "cpu")

    torch.manual_seed(args.seed)
    np.random.seed(args.seed)
    if device.type == 'cuda':
        torch.cuda.manual_seed(args.seed)

    kwargs = {'num_workers': 1, 'pin_memory': True} if use_cuda else {}

    mean, std = get_normal(args.data)

    if args.test_data == "cifar10":
        test_transform = trn.Compose(
            [trn.ToTensor(), trn.Normalize(mean, std)])
        test_loader = torch.utils.data.DataLoader(
            datasets.CIFAR10('../data',
                             download=True,
                             train=False,
                             transform=test_transform),
            batch_size=args.test_batch_size,
            shuffle=True,
            **kwargs)
    elif args.test_data == "cifar10_bw":
        test_transform = trn.Compose([
            trn.Grayscale(),
            trn.Resize((28, 28)),
            trn.ToTensor(),
            trn.Normalize(mean, std)
        ])
        test_loader = torch.utils.data.DataLoader(
            datasets.CIFAR10('../data',
                             download=True,
                             train=False,
                             transform=test_transform),
            batch_size=args.test_batch_size,
            shuffle=True,
            **kwargs)
    elif args.test_data == "svhn":
        test_transform = trn.Compose(
            [trn.ToTensor(), trn.Normalize(mean, std)])
        test_loader = torch.utils.data.DataLoader(
            datasets.SVHN('../data',
                          download=True,
                          split='test',
                          transform=test_transform),
            batch_size=args.test_batch_size,
            shuffle=True,
            **kwargs)
    elif args.test_data == "fakedata":
        test_transform = trn.Compose(
            [trn.ToTensor(), trn.Normalize(mean, std)])
        test_loader = torch.utils.data.DataLoader(
            datasets.FakeData(size=10000,
                              image_size=(3, 32, 32),
                              transform=test_transform),
            batch_size=args.test_batch_size,
            shuffle=True,
            **kwargs)
    elif args.test_data == "fakedata_bw":
        test_transform = trn.Compose(
            [trn.ToTensor(), trn.Normalize(mean, std)])
        test_loader = torch.utils.data.DataLoader(
            datasets.FakeData(size=10000,
                              image_size=(1, 28, 28),
                              transform=test_transform),
            batch_size=args.test_batch_size,
            shuffle=True,
            **kwargs)
    elif args.test_data == "fakedata_wm":
        # wrong mean normalization
        mean = (50, 50, 50)
        test_transform = trn.Compose(
            [trn.ToTensor(), trn.Normalize(mean, std)])
        test_loader = torch.utils.data.DataLoader(
            datasets.FakeData(size=10000,
                              image_size=(3, 32, 32),
                              transform=test_transform),
            batch_size=args.test_batch_size,
            shuffle=True,
            **kwargs)
    elif args.test_data == "fmnist":
        test_transform = trn.Compose(
            [trn.ToTensor(), trn.Normalize(mean, std)])
        test_loader = torch.utils.data.DataLoader(
            datasets.FashionMNIST('../data',
                                  download=True,
                                  train=False,
                                  transform=test_transform),
            batch_size=args.test_batch_size,
            shuffle=True,
            **kwargs)
    elif args.test_data == "kmnist":
        test_transform = trn.Compose(
            [trn.ToTensor(), trn.Normalize(mean, std)])
        test_loader = torch.utils.data.DataLoader(
            datasets.KMNIST('../data',
                            download=True,
                            train=False,
                            transform=test_transform),
            batch_size=args.test_batch_size,
            shuffle=True,
            **kwargs)
    elif args.test_data == "mnist":
        test_transform = trn.Compose([
            trn.ToTensor(),
            # lambda x : x.repeat(3,1,1) * torch.rand(3,1,1),
            trn.Normalize(mean, std)
        ])
        test_loader = torch.utils.data.DataLoader(
            datasets.MNIST('../data',
                           download=True,
                           train=False,
                           transform=test_transform),
            batch_size=args.test_batch_size,
            shuffle=True,
            **kwargs)
    elif args.test_data == "lsun":
        test_transform = trn.Compose([
            trn.Resize((32, 32)),  #trn.CenterCrop(32),
            trn.ToTensor(),
            trn.Normalize(mean, std)
        ])
        test_loader = torch.utils.data.DataLoader(
            datasets.LSUN(args.lsun_path,
                          classes='test',
                          transform=test_transform),
            batch_size=args.test_batch_size,
            shuffle=True,
            **kwargs)

    if args.data == "cifar10":
        Nc = 10
        channels = 3
    elif args.data == "svhn":
        Nc = 10
        channels = 3
    elif args.data == "fmnist":
        Nc = 10
        channels = 1
    elif args.data == "kmnist":
        Nc = 10
        channels = 1

    if (args.mode == 'msp') | (args.mode == 'odin') | (args.mode == 'cb'):
        nu = 0.0
    elif args.mode == 'tmsp':
        nu = 1.0
    elif args.mode == 'tmsp0.5':
        nu = 0.5
    elif args.mode == 'tmsp5.0':
        nu = 5.0
    elif args.mode == 'tmsp10.0':
        nu = 10.0
    else:
        print('mode not recognized!')
        quit()

    model_path = 'models'
    model_path += '/' + args.data
    model_name = args.arch + 'nu{}'.format(nu)

    if args.arch == 'densenet':
        densenet_depth = 100
        model = DenseNet(densenet_depth, Nc, nu=nu).to(device)
    elif args.arch == 'densenet_small':
        densenet_depth = 10
        model = DenseNet(densenet_depth, Nc, nu=nu).to(device)
    elif args.arch == 'convnet':
        model = ConvNet(Nc, channels=channels, nu=nu).to(device)

    model.load_state_dict(
        torch.load(model_path + '/' + model_name + '.pt', map_location=device))

    score, is_hit = test(args, model, device, test_loader)
    if not os.path.exists(args.save_path):
        os.makedirs(args.save_path)
    df = pd.DataFrame(data={'score': score, 'is_hit': is_hit})
    df.to_csv('{}/{}_train{}_test{}_{}.csv'.format(args.save_path, args.arch,
                                                   args.data, args.test_data,
                                                   args.mode))
Пример #22
0
    return dropout, reg


cifar10 = cifar10_utils.get_cifar10('./cifar10/cifar-10-batches-py')

print('done getting cifar10')

image_shape = cifar10.train.images.shape[1:4]
num_classes = cifar10.test.labels.shape[1]

# Construct linear convnet graph
x = tf.placeholder(tf.float32, shape=[None] + list(image_shape), name='x')
y = tf.placeholder(tf.int32, shape=(None, num_classes), name='y')
is_training = tf.placeholder(dtype=tf.bool, shape=(), name='isTraining')

model = ConvNet(is_training=is_training)

_ = model.inference(x)
#%%
with tf.Session() as sess:

    # Initialise all variables
    tf.initialize_all_variables().run(session=sess)

    checkpoint_dirs = ['checkpoints_0reg_lr1e4_sqrtinit']
    ckpt_file = 'epoch14000.ckpt'
    #subdir = './'
    subdir = 'checkpoints_new/'
    test_size = 1000

    saver = tf.train.Saver()
Пример #23
0
""" View the options used to create a checkpoint

    python view_options.py --load-file <checkpoint>
"""
from convnet import ConvNet
from python_util.gpumodel import IGPUModel

op = ConvNet.get_options_parser()

op, load_dic = IGPUModel.parse_options(op)
model = ConvNet(op, load_dic)

model.op.print_values()
print "========================="
model.print_model_state()
Пример #24
0
        visdom_log['train_loss'].append(loss_train)
        visdom_log['test_loss'].append(loss_test)

    return plot, visdom_log


if __name__ == "__main__":
    logs = []
    colors = []
    trace_names = []

    start_t = time.time()
    print("\n\n > Teacher training ... ")
    colors.append('orange')
    trace_names.extend(['Teacher Train', 'Teacher Test'])
    model = ConvNet(net_dataset=CIFAR10)
    model.cuda()
    plot, log_base = run_training(model, 'Teacher_', args.epochs)
    logs.append(log_base)

    # wider student training
    print("\n\n > Wider Student training ... ")
    colors.append('blue')
    trace_names.extend(['Wider Net2Net Train', 'Wider Net2Net Test'])
    model_ = ConvNet(net_dataset=CIFAR10)
    model_ = copy.deepcopy(model)

    del model
    model = model_
    model.wider(operation='net2net', widening_factor=2)
    print model
Пример #25
0
def objective(layer_file_name, param_file_name, save_file_name):
    def logprob_errors(error_output):
        error_types, n = error_output
        logprob = error_types['logprob'][0] / n
        classifier = error_types['logprob'][1] / n
        logprob = np.inf if np.isnan(logprob) else logprob
        classifier = np.inf if np.isnan(classifier) else classifier
        return logprob, classifier

    real_stdout = sys.stdout
    sys.stdout = open(save_file_name + '.log', 'w')
    convnet = None
    try:
        # set up options
        op = ConvNet.get_options_parser()

        for option in op.get_options_list():
            option.set_default()

        op.set_value('data_path', os.path.expanduser('~/data/cifar-10-py-colmajor/'))
        op.set_value('dp_type', 'cifar')
        op.set_value('inner_size', '24')

        op.set_value('gpu', '0')
        op.set_value('testing_freq', '25')

        op.set_value('train_batch_range', '1-5')
        op.set_value('test_batch_range', '6')
        op.set_value('num_epochs', n_epochs, parse=False)

        op.set_value('layer_def', layer_file_name)
        op.set_value('layer_params', param_file_name)
        op.set_value('save_file_override', save_file_name)

        convnet = ConvNet(op, None)

        # train for three epochs and make sure error is okay
        convnet.num_epochs = 3
        convnet.train()

        logprob, error = logprob_errors(convnet.train_outputs[-1])
        if not (error > 0 and error < 0.85):
            # should get at most 85% error after three epochs
            print "\naborted (%s, %s)" % (logprob, error)
            return logprob, error

        # train for full epochs
        convnet.num_epochs = n_epochs
        convnet.train()

        logprob, error = logprob_errors(convnet.get_test_error())
        print "\nfinished (%s, %s)" % (logprob, error)

        return logprob, error
    except RuntimeError:
        print "\nerrored at epoch %d" % (convnet.epoch)
        return np.inf, 1.0
    finally:
        if convnet is not None:
            convnet.destroy_model_lib()

        print "\n"  # end any pending lines to ensure flush
        sys.stdout.flush()
        sys.stdout.close()
        sys.stdout = real_stdout
Пример #26
0
train_csvs = csvs[:train_csvs_size]
valid_csvs = csvs[train_csvs_size:]

n_train = count_datasets_total(train_csvs)
n_valid = count_datasets_total(valid_csvs)

print(f'# of training set: {n_train}')
print(f'# of validation set: {n_valid}')

word_encoder, countrycode_encoder = get_encoders(csvs)

with tf.Session() as sess:
    K.set_session(sess)

    convnet = ConvNet(
        word_encoder,
        countrycode_encoder,
    )

    model = convnet.get_model()
    model.summary()
    hist = model.fit_generator(
        convnet.get_generator(
            train_csvs,
            batch_size=BATCH_SIZE,
        ),
        steps_per_epoch=np.ceil(n_train / BATCH_SIZE).astype('int'),
        epochs=EPOCHS,
        validation_data=convnet.get_generator(
            valid_csvs,
            batch_size=BATCH_SIZE,
        ),
valid_target_y = './yval.txt'

data = DataSet(pos_samples, neg_samples, vocab_file, inv_vocab_file,
               valid_target_x, valid_target_y)

with tf.Graph().as_default():
    session_conf = tf.ConfigProto(
        allow_soft_placement=FLAGS.allow_soft_placement,
        log_device_placement=FLAGS.log_device_placement)

    sess = tf.Session(config=session_conf)
    with sess.as_default():
        cnn = ConvNet(
            seq_lenth=data.seq_len,
            num_classes=2,
            vocab_size=len(data.vocab),
            embedding_dim=FLAGS.embedding_dim,
            filter_lengths=[int(l) for l in FLAGS.filter_lengths.split(',')],
            num_filters=FLAGS.num_filters)

        global_step = tf.Variable(0, name='global_step', trainable=False)
        optimizer = tf.train.AdamOptimizer(1e-3)
        grads_and_vars = optimizer.compute_gradients(cnn.loss)
        train_op = optimizer.apply_gradients(grads_and_vars,
                                             global_step=global_step)

        sess.run(tf.initialize_all_variables())

        def train_step(x_batch, y_batch):
            feed_dict = {
                cnn.input_x: x_batch,
def generator(input_shape, dimH, dimZ, dimY, n_channel, last_activation, name):

    # first construct p(y|z, x)
    # encoder for z (low res)
    layer_channels = [n_channel, n_channel * 2, n_channel * 4]
    filter_width = 5
    filter_shapes = construct_filter_shapes(layer_channels, filter_width)
    fc_layer_sizes = [dimH]
    gen_conv, conv_output_shape = ConvNet(name+'_pyzx_conv', input_shape, filter_shapes, \
                                     fc_layer_sizes, 'relu',
                                     last_activation = 'relu')
    print('generator shared Conv net ' + ' network architecture:', \
            conv_output_shape, fc_layer_sizes)

    fc_layers = [dimZ + dimH, dimH, dimY]
    pyzx_mlp_layers = []
    N_layers = len(fc_layers) - 1
    l = 0
    for i in range(N_layers):
        name_layer = name + '_pyzx_mlp_l%d' % l
        if i + 1 == N_layers:
            activation = 'linear'
        else:
            activation = 'relu'
        pyzx_mlp_layers.append(
            mlp_layer(fc_layers[i], fc_layers[i + 1], activation, name_layer))

    def pyzx_params(z, x):
        fea = gen_conv(x)
        out = tf.concat([fea, z], axis=1)
        for layer in pyzx_mlp_layers:
            out = layer(out)
        return out

    # now construct p(x|z)
    filter_width = 5
    decoder_input_shape = [(4, 4, n_channel * 4), (8, 8, n_channel * 2),
                           (16, 16, n_channel)]
    decoder_input_shape.append(input_shape)
    fc_layers = [dimZ, dimH, int(np.prod(decoder_input_shape[0]))]
    l = 0
    # first include the MLP
    mlp_layers = []
    N_layers = len(fc_layers) - 1
    for i in range(N_layers):
        name_layer = name + '_l%d' % l
        mlp_layers.append(
            mlp_layer(fc_layers[i], fc_layers[i + 1], 'relu', name_layer))
        l += 1

    conv_layers = []
    N_layers = len(decoder_input_shape) - 1
    for i in range(N_layers):
        if i < N_layers - 1:
            activation = 'relu'
        else:
            activation = last_activation
        name_layer = name + '_l%d' % l
        output_shape = decoder_input_shape[i + 1]
        input_shape = decoder_input_shape[i]
        up_height = int(np.ceil(output_shape[0] / float(input_shape[0])))
        up_width = int(np.ceil(output_shape[1] / float(input_shape[1])))
        strides = (1, up_height, up_width, 1)
        if activation in [
                'logistic_cdf', 'gaussian'
        ] and i == N_layers - 1:  # ugly wrapping for logistic cdf likelihoods
            activation = 'split'
            output_shape = (output_shape[0], output_shape[1],
                            output_shape[2] * 2)

        filter_shape = (filter_width, filter_width, output_shape[-1],
                        input_shape[-1])

        conv_layers.append(deconv_layer(output_shape, filter_shape, activation, \
                                            strides, name_layer))
        l += 1

    print('decoder shared Conv Net of size', decoder_input_shape)

    def pxz_params(z):
        x = z
        for layer in mlp_layers:
            x = layer(x)
        x = tf.reshape(x,
                       (x.get_shape().as_list()[0], ) + decoder_input_shape[0])
        for layer in conv_layers:
            x = layer(x)
        return x

    return pyzx_params, pxz_params
Пример #29
0
from convnet import ConvNet
import tqdm
import os
import json
import cv2


path = '/Users/ayder/enviroments/pnenv/src/convnet/data/new_data/test'
err_path = '/Users/ayder/enviroments/pnenv/src/convnet/data/new_data/errors'
settings = json.load(open('/Users/ayder/enviroments/pnenv/src/convnet/settings/settings.json'))

print(settings)

settings['model_path'] = '/Users/ayder/enviroments/pnenv/src/convnet/models/model_is50_ep50_bs20'
convnet = ConvNet(settings)
convnet.load_model(settings['model_path'])

wrong_samples = {}
sample_cnt = 0
err_cnt = 0
for lbl in settings['labels']:
    lbl_path = os.path.join(path, lbl)
    files = [f for f in os.listdir(lbl_path) if not f.startswith('.')]
    wrong_samples[lbl] = []
    for f in tqdm.tqdm(files):
        sample_cnt += 1
        img = cv2.imread(os.path.join(lbl_path, f))
        prediction = convnet.predict(img)
        prediction_label = convnet.labels[prediction]
        if prediction_label != lbl:
            wrong_samples[lbl].append((f, prediction_label))
Пример #30
0
    prot = args.protocol.split('-')
    data_path_train, data_path_val = set_protocol(args.data_path, prot[0], prot[1])

    trainset = OpenMIC_Data('train', data_path_train)
    train_sampler = CategoriesSampler(trainset.label, 100,
                                      args.train_way, args.shot + args.query)
    train_loader = DataLoader(dataset=trainset, batch_sampler=train_sampler,
                              num_workers=8, pin_memory=True)

    valset = OpenMIC_Data('val', data_path_val)
    val_sampler = CategoriesSampler(valset.label, 1000,
                                    args.test_way, args.shot + args.query)
    val_loader = DataLoader(dataset=valset, batch_sampler=val_sampler,
                            num_workers=8, pin_memory=True)

    model = ConvNet().cuda()
    shot_num = args.shot
    if args.shot == 1:
        shot_num = 2
        args.subspace_dim = 1
    else:
        shot_num = args.shot

    projection_pro = Subspace_Projection(num_dim=args.subspace_dim)

    optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
    lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=50, gamma=0.5)

    def save_model(name):
        if not os.path.exists(args.save_path):
            os.mkdir(args.save_path)