def run(learning_rate, freeze_interval, num_hidden, reg): room_size = 5 num_rooms = 2 mdp = mdps.MazeMDP(room_size, num_rooms) mdp.compute_states() mdp.EXIT_REWARD = 1 mdp.MOVE_REWARD = -0.01 discount = 1 num_actions = len(mdp.get_actions(None)) batch_size = 100 print 'building network...' network = qnetwork.QNetwork(input_shape=2 * room_size + num_rooms ** 2, batch_size=batch_size, num_hidden_layers=2, num_actions=4, num_hidden=num_hidden, discount=discount, learning_rate=learning_rate, regularization=reg, update_rule='adam', freeze_interval=freeze_interval, rng=None) num_epochs = 50 epoch_length = 2 test_epoch_length = 0 max_steps = 4 * (room_size * num_rooms) ** 2 epsilon_decay = (num_epochs * epoch_length * max_steps) / 1.5 print 'building policy...' p = policy.EpsilonGreedy(num_actions, 0.5, 0.05, epsilon_decay) print 'building memory...' rm = replay_memory.ReplayMemory(batch_size, capacity=50000) print 'building logger...' log = logger.NeuralLogger(agent_name='QNetwork') print 'building state adapter...' adapter = state_adapters.CoordinatesToRowColRoomAdapter(room_size=room_size, num_rooms=num_rooms) # adapter = state_adapters.CoordinatesToRowColAdapter(room_size=room_size, num_rooms=num_rooms) # adapter = state_adapters.CoordinatesToFlattenedGridAdapter(room_size=room_size, num_rooms=num_rooms) # adapter = state_adapters.IdentityAdapter(room_size=room_size, num_rooms=num_rooms) # adapter = state_adapters.CoordinatesToSingleRoomRowColAdapter(room_size=room_size) print 'building agent...' a = agent.NeuralAgent(network=network, policy=p, replay_memory=rm, log=log, state_adapter=adapter) run_tests = False e = experiment.Experiment(mdp, a, num_epochs, epoch_length, test_epoch_length, max_steps, run_tests, value_logging=True) e.run() ak = file_utils.load_key('../access_key.key') sk = file_utils.load_key('../secret_key.key') bucket = 'hierarchical' try: aws_util = aws_s3_utility.S3Utility(ak, sk, bucket) aws_util.upload_directory(e.agent.logger.log_dir) except Exception as e: print 'error uploading to s3: {}'.format(e)
# radius of the Earth R = 6378.1 # radius of images around center of city IMAGE_RADIUS = 10 # number of images to download from each city NUM_IMAGES_PER_CITY = 200 # size of failed-download image FAILED_DOWNLOAD_IMAGE_SIZE = 3554 # place key in a file in the Geo-Localization directory # as the only text in the file on one line KEY_FILEPATH = "../api_key.key" API_KEY = file_utils.load_key(KEY_FILEPATH) GOOGLE_URL = ("http://maps.googleapis.com/maps/api/streetview?sensor=false&" "size=256x256&fov=120&key=" + API_KEY) IMAGES_DIR = '../imgs/' def download_images_for_city(city, lat, lon): print 'downloading images of {}'.format(city) num_imgs = 0 misses = 0 cur_directory = os.path.join(IMAGES_DIR, city) if not os.path.exists(cur_directory): os.makedirs(cur_directory) while num_imgs < 100:
# radius of the Earth R = 6378.1 # radius of images around center of city IMAGE_RADIUS = 10 # number of images to download from each city NUM_IMAGES_PER_CITY = 200 # size of failed-download image FAILED_DOWNLOAD_IMAGE_SIZE = 3464 # place key in a file in the Geo-Localization directory # as the only text in the file on one line KEY_FILEPATH = "../api_key.key" API_KEY = file_utils.load_key(KEY_FILEPATH) GOOGLE_URL = ("http://maps.googleapis.com/maps/api/streetview?" "size=256x256&fov=120&pitch=10&key=" + API_KEY) IMAGES_DIR = '../data/cities/' def download_images_for_city(city, lat, lon): print('downloading images of {}'.format(city)) num_imgs = 0 misses = 0 cur_directory = os.path.join(IMAGES_DIR, city) if not os.path.exists(cur_directory): os.makedirs(cur_directory) while num_imgs < 100:
def run(learning_rate, freeze_interval, num_hidden, reg, seq_len, eps, nt, update): room_size = 5 num_rooms = 2 input_shape = 2 * room_size print 'building mdp...' mdp = mdps.MazeMDP(room_size, num_rooms) mdp.compute_states() mdp.EXIT_REWARD = 1 mdp.MOVE_REWARD = -0.01 network_type = nt discount = 1 sequence_length = seq_len num_actions = len(mdp.get_actions(None)) batch_size = 100 update_rule = update print 'building network...' network = recurrent_qnetwork.RecurrentQNetwork(input_shape=input_shape, sequence_length=sequence_length, batch_size=batch_size, num_actions=4, num_hidden=num_hidden, discount=discount, learning_rate=learning_rate, regularization=reg, update_rule=update_rule, freeze_interval=freeze_interval, network_type=network_type, rng=None) # take this many steps because (very loosely): # let l be the step length # let d be the difference in start and end locations # let N be the number of steps for the agent to travel a distance d # then N ~ (d/l)^2 // assuming this is a random walk # with l = 1, this gives d^2 in order to make it N steps away # the desired distance here is to walk along both dimensions of the maze # which is equal to two times the num_rooms * room_size # so squaring that gives a loose approximation to the number of # steps needed (discounting that this is actually a lattice (does it really matter?)) # (also discounting the walls) # see: http://mathworld.wolfram.com/RandomWalk2-Dimensional.html max_steps = (2 * room_size * num_rooms) ** 2 num_epochs = 500 epoch_length = 1 test_epoch_length = 0 epsilon_decay = (num_epochs * epoch_length * max_steps) / 4 print 'building adapter...' adapter = state_adapters.CoordinatesToSingleRoomRowColAdapter(room_size=room_size) print 'building policy...' p = policy.EpsilonGreedy(num_actions, eps, 0.05, epsilon_decay) print 'building replay memory...' # want to track at minimum the last 50 episodes capacity = max_steps * 50 rm = replay_memory.SequenceReplayMemory(input_shape=input_shape, sequence_length=sequence_length, batch_size=batch_size, capacity=capacity) print 'building logger...' log = logger.NeuralLogger(agent_name=network_type) print 'building agent...' a = agent.RecurrentNeuralAgent(network=network, policy=p, replay_memory=rm, log=log, state_adapter=adapter) run_tests = False print 'building experiment...' e = experiment.Experiment(mdp, a, num_epochs, epoch_length, test_epoch_length, max_steps, run_tests, value_logging=True) print 'running experiment...' e.run() ak = file_utils.load_key('../access_key.key') sk = file_utils.load_key('../secret_key.key') bucket = 'hierarchical9' try: aws_util = aws_s3_utility.S3Utility(ak, sk, bucket) aws_util.upload_directory(e.agent.logger.log_dir) except Exception as e: print 'error uploading to s3: {}'.format(e)
def run(learning_rate, freeze_interval, num_hidden, reg, seq_len, eps, nt, update): room_size = 5 num_rooms = 2 input_shape = 2 * room_size print 'building mdp...' mdp = mdps.MazeMDP(room_size, num_rooms) mdp.compute_states() mdp.EXIT_REWARD = 1 mdp.MOVE_REWARD = -0.01 network_type = nt discount = 1 sequence_length = seq_len num_actions = len(mdp.get_actions(None)) batch_size = 100 update_rule = update print 'building network...' network = recurrent_qnetwork.RecurrentQNetwork( input_shape=input_shape, sequence_length=sequence_length, batch_size=batch_size, num_actions=4, num_hidden=num_hidden, discount=discount, learning_rate=learning_rate, regularization=reg, update_rule=update_rule, freeze_interval=freeze_interval, network_type=network_type, rng=None) # take this many steps because (very loosely): # let l be the step length # let d be the difference in start and end locations # let N be the number of steps for the agent to travel a distance d # then N ~ (d/l)^2 // assuming this is a random walk # with l = 1, this gives d^2 in order to make it N steps away # the desired distance here is to walk along both dimensions of the maze # which is equal to two times the num_rooms * room_size # so squaring that gives a loose approximation to the number of # steps needed (discounting that this is actually a lattice (does it really matter?)) # (also discounting the walls) # see: http://mathworld.wolfram.com/RandomWalk2-Dimensional.html max_steps = (2 * room_size * num_rooms)**2 num_epochs = 500 epoch_length = 1 test_epoch_length = 0 epsilon_decay = (num_epochs * epoch_length * max_steps) / 4 print 'building adapter...' adapter = state_adapters.CoordinatesToSingleRoomRowColAdapter( room_size=room_size) print 'building policy...' p = policy.EpsilonGreedy(num_actions, eps, 0.05, epsilon_decay) print 'building replay memory...' # want to track at minimum the last 50 episodes capacity = max_steps * 50 rm = replay_memory.SequenceReplayMemory( input_shape=input_shape, sequence_length=sequence_length, batch_size=batch_size, capacity=capacity) print 'building logger...' log = logger.NeuralLogger(agent_name=network_type) print 'building agent...' a = agent.RecurrentNeuralAgent(network=network, policy=p, replay_memory=rm, log=log, state_adapter=adapter) run_tests = False print 'building experiment...' e = experiment.Experiment(mdp, a, num_epochs, epoch_length, test_epoch_length, max_steps, run_tests, value_logging=True) print 'running experiment...' e.run() ak = file_utils.load_key('../access_key.key') sk = file_utils.load_key('../secret_key.key') bucket = 'hierarchical9' try: aws_util = aws_s3_utility.S3Utility(ak, sk, bucket) aws_util.upload_directory(e.agent.logger.log_dir) except Exception as e: print 'error uploading to s3: {}'.format(e)
def run(learning_rate, freeze_interval, num_hidden, reg): room_size = 5 num_rooms = 2 mdp = mdps.MazeMDP(room_size, num_rooms) mdp.compute_states() mdp.EXIT_REWARD = 1 mdp.MOVE_REWARD = -0.01 discount = 1 num_actions = len(mdp.get_actions(None)) batch_size = 100 print 'building network...' network = qnetwork.QNetwork(input_shape=2 * room_size + num_rooms**2, batch_size=batch_size, num_hidden_layers=2, num_actions=4, num_hidden=num_hidden, discount=discount, learning_rate=learning_rate, regularization=reg, update_rule='adam', freeze_interval=freeze_interval, rng=None) num_epochs = 50 epoch_length = 2 test_epoch_length = 0 max_steps = 4 * (room_size * num_rooms)**2 epsilon_decay = (num_epochs * epoch_length * max_steps) / 1.5 print 'building policy...' p = policy.EpsilonGreedy(num_actions, 0.5, 0.05, epsilon_decay) print 'building memory...' rm = replay_memory.ReplayMemory(batch_size, capacity=50000) print 'building logger...' log = logger.NeuralLogger(agent_name='QNetwork') print 'building state adapter...' adapter = state_adapters.CoordinatesToRowColRoomAdapter( room_size=room_size, num_rooms=num_rooms) # adapter = state_adapters.CoordinatesToRowColAdapter(room_size=room_size, num_rooms=num_rooms) # adapter = state_adapters.CoordinatesToFlattenedGridAdapter(room_size=room_size, num_rooms=num_rooms) # adapter = state_adapters.IdentityAdapter(room_size=room_size, num_rooms=num_rooms) # adapter = state_adapters.CoordinatesToSingleRoomRowColAdapter(room_size=room_size) print 'building agent...' a = agent.NeuralAgent(network=network, policy=p, replay_memory=rm, log=log, state_adapter=adapter) run_tests = False e = experiment.Experiment(mdp, a, num_epochs, epoch_length, test_epoch_length, max_steps, run_tests, value_logging=True) e.run() ak = file_utils.load_key('../access_key.key') sk = file_utils.load_key('../secret_key.key') bucket = 'hierarchical' try: aws_util = aws_s3_utility.S3Utility(ak, sk, bucket) aws_util.upload_directory(e.agent.logger.log_dir) except Exception as e: print 'error uploading to s3: {}'.format(e)