# deserialize and run the model in neon # generate a backend be = gen_backend(backend='gpu', rng_seed=1, batch_size=256) with open(conv_weights_fn, 'r') as fid: pdict_l = pickle.load(fid) # for testing we need to switch dropout to keep=1.0 md = ModelDescription(pdict_l) # get the dropout values set in the serialized file and reset them to # have no dropout for comparison between caffe drop_layers = {ky: -1 for ky in ["drop6", "drop7"]} for l in drop_layers: drop_layer = md.getlayer(l) drop_layers[l] = drop_layer['config']['keep'] drop_layer['config']['keep'] = 1.0 md = dict(md) # generate a fake input IM_SIZE = (be.bsz, 3, 224, 224) np.random.seed(1) im = np.random.randint(-150, 150, IM_SIZE) fake_labels = np.zeros((IM_SIZE[0], 10)) # need this iterator to initialize the model train = ArrayIterator(im.reshape(IM_SIZE[0], -1).copy(), fake_labels, nclass=10, lshape=IM_SIZE[1:])
# deserialize and run the model in neon # generate a backend be = gen_backend(backend='gpu', rng_seed=1, batch_size=64) with open(conv_file_path, 'r') as fid: pdict_l = pickle.load(fid) # for testing we need to switch dropout to keep=1.0 # get the dropout values set in the serialized file and reset them to # have no dropout for comparison between caffe md = ModelDescription(pdict_l) drop_layers = {ky: -1 for ky in ["loss1/drop_fc", "loss2/drop_fc", "pool5/drop_7x7_s1"]} for l in drop_layers: drop_layer = md.getlayer(l) drop_layers[l] = drop_layer['config']['keep'] drop_layer['config']['keep'] = 1.0 md = dict(md) # generate a fake input IM_SIZE = (be.bsz, 3, 224, 224) np.random.seed(1) im = np.random.randint(-150, 150, IM_SIZE) fake_labels = np.zeros((IM_SIZE[0], 10)) # need this iterator to initialize the model train = ArrayIterator(im.reshape(IM_SIZE[0], -1).copy(), fake_labels, nclass=10, lshape=IM_SIZE[1:]) # deserialize the neon model model = Model(md, train)
onehot=False, target_dtype=np.uint8, nclasses=c) data_dir = args.image_path test_set = PixelWiseImageLoader(set_name='test', repo_dir=data_dir,media_params=test_params, index_file=os.path.join(data_dir, 'test_images.csv'), **common) # initialize model object segnet_model = Model(layers=gen_model(c, h, w)) segnet_model.initialize(test_set) # load up the serialized model model_desc = ModelDescription(load_obj(args.save_model_file)) for layer in segnet_model.layers_to_optimize: name = layer.name trained_layer = model_desc.getlayer(name) layer.load_weights(trained_layer) fig = plt.figure() if args.display: plt.ion() im1 = None im2 = None cnt = 1 for x, t in test_set: z = segnet_model.fprop(x).get() z = np.argmax(z.reshape((c, h, w)), axis=0) t = np.argmax(t.get().reshape((c, h, w)), axis=0)
test_set = PixelWiseImageLoader(set_name='test', repo_dir=data_dir, media_params=test_params, index_file=os.path.join( data_dir, 'test_images.csv'), **common) # initialize model object segnet_model = Model(layers=gen_model(c, h, w)) segnet_model.initialize(test_set) # load up the serialized model model_desc = ModelDescription(load_obj(args.save_model_file)) for layer in segnet_model.layers_to_optimize: name = layer.name trained_layer = model_desc.getlayer(name) layer.load_weights(trained_layer) fig = plt.figure() if args.display: plt.ion() im1 = None im2 = None cnt = 1 for x, t in test_set: z = segnet_model.fprop(x).get() z = np.argmax(z.reshape((c, h, w)), axis=0) t = np.argmax(t.get().reshape((c, h, w)), axis=0)
layers = args.layers if layers is None or len(layers) == 0: print 'No layers indicated - will try to guess' try: if model['model']['type'].find('Tree') > -1: layers = [] for clayer in model['model']['config']['layers']: layers.extend(find_output_layer(clayer['config']['layers'])) else: layers = find_output_layer(model['model']['config']['layers']) except: raise ValueError('Could not parse the layers which need to be updated ' 'provide name(s) of the layer(s) explicitly on command line') for layer in layers: l = model.getlayer(layer) if l is None: raise ValueError('Could not find layer %s in model file' % layer) if l['type'].find('Bias') > -1: l['params']['W'] = l['params']['W'][lbl_map].copy() elif l['type'].find('Linear') > -1: l['params']['W'] = l['params']['W'][lbl_map, :].copy() else: raise ValueError('Currently only bias and linear layers can be shuffled') new_file = os.path.splitext(args.model_file) new_file = new_file[0] + '_neon_shuffle' + new_file[1] print 'saving to file: %s' % new_file with open(new_file, 'w') as fid: pickle.dump(dict(model), fid)