def load_listener(curr_opts, trainpop_files): model = SpeakerListener(args).to(device=args.device) model.beholder = Beholder(curr_opts).to(device=args.device) model.listener = Listener(curr_opts, model.beholder).to(device=args.device) model_dict = torch.load(os.path.join(trainpop_files, f'pop{args.seed}.pt'), map_location=args.device) model.listener.load_state_dict(model_dict) return model
def disable_get_listener_name(update: Update, context: CallbackContext): listener_id = update.callback_query.data listener = Listener.get(Listener.id == listener_id) listener.enable = False listener.save() msg = f'Disable listener {listener.description}' update.effective_message.edit_text(msg) return ConversationHandler.END
def post(self): data = ping_parser.parse_args() dt = datetime.datetime.utcnow() listener = Listener.get(Listener.key == data["key"]) if listener.enable: Message.create(listener=listener, data="PING", timestamp=dt) return {}, 200 return {}, 403
def post(self): data = update_parser.parse_args() dt = datetime.datetime.utcnow() listener = Listener.get(Listener.key == data["key"]) if listener.enable: Message.create(listener=listener, data=data["data"], timestamp=dt) msg = f"{listener.description} listener new message:\n{data['data']}" self.notify(listener.chat_id, msg) return {}, 200 return {}, 403
def create_listener_get_description(update: Update, context: CallbackContext): description = update.message.text chat_id: int = update.message.chat_id listener = Listener.create(chat_id=chat_id, description=description, key=str(uuid.uuid4())) update.message.reply_text( text=f"Create listener with key = {listener.key}", reply_markup=ReplyKeyboardRemove()) return ConversationHandler.END
def __init__(self, target_size, vocab_size, bias, test_data, seed, episodes=1000): self.data = test_data self.vocab_size = vocab_size self.target_size = target_size self.speaker_bias = 1.0 - bias self.listener_bias = bias self.speaker = Speaker(512, self.target_size, self.vocab_size, self.speaker_bias, seed) self.listener = Listener(512, self.vocab_size, self.target_size, self.listener_bias, seed) self.episode_rewards = [] self.accuracy_history = deque(maxlen=100) self.symbols_used = {} self.synonym_array = np.zeros((target_size, vocab_size)) self.accuracy_record = [] self.episodes = 1000
def __init__(self,target_size,vocab_size,bias,test_data,seed,episodes=1000): self.data = test_data self.vocab_size = vocab_size self.target_size = target_size self.speaker_bias = 1.0 - bias self.listener_bias = bias self.speaker = Speaker(512,self.target_size,self.vocab_size,self.speaker_bias,seed) self.listener = Listener(512,self.vocab_size,self.target_size,self.listener_bias,seed) self.episode_rewards = [] self.accuracy_history = deque(maxlen=100) self.symbols_used = {} self.synonym_array = np.zeros((target_size,vocab_size)) self.accuracy_record = [] self.episodes = 1000
def listener_index(): if request.method=='POST': listener_name=request.form['name'] profile_pic=request.files['profile_pic'] filename=images.save(profile_pic) newuser=Listener(name=listener_name,profile_pic=filename) try: db.session.add(newuser) db.session.commit() return redirect('/listeners') except: return 'There was an issue adding listener' else: listeners=Listener.query.order_by('name').all() return render_template('listener_index.html', listeners=listeners)
class Game_Master(): def __init__(self, target_size, vocab_size, bias, test_data, seed, episodes=1000): self.data = test_data self.vocab_size = vocab_size self.target_size = target_size self.speaker_bias = 1.0 - bias self.listener_bias = bias self.speaker = Speaker(512, self.target_size, self.vocab_size, self.speaker_bias, seed) self.listener = Listener(512, self.vocab_size, self.target_size, self.listener_bias, seed) self.episode_rewards = [] self.accuracy_history = deque(maxlen=100) self.symbols_used = {} self.synonym_array = np.zeros((target_size, vocab_size)) self.accuracy_record = [] self.episodes = 1000 def create_labels(self, num_labels, num_repeats): arr = np.array([]) for i in range(num_labels): n = np.repeat(i, num_repeats) arr = np.concatenate((arr, n)) np.random.shuffle(arr) return arr def sample(self, label, test_or_train="X_train"): train = self.data[test_or_train] size = train[0].shape[0] target_one_hot = to_categorical(label, num_classes=self.target_size) target_image = 0 image_list = [] for i in range(self.target_size): sampled_image = np.expand_dims(train[i][np.random.choice(size), :], 0) if i == label: target_image = sampled_image image_list.append(sampled_image) return target_image, image_list, target_one_hot def cross_entropy(self, predictions, targets, epsilon=1e-12): predictions = np.clip(predictions, epsilon, 1. - epsilon) N = predictions.shape[0] ce = -np.sum(np.sum(targets * np.log(predictions + 1e-9))) / N return ce def test(self): y = self.create_labels(10, 1) one_hot = to_categorical(y) it = 0 while it < y.shape[0]: label = y[it] target_image, image_list, target_one_hot = self.sample( label, "X_test") speaker_action, speaker_probs = self.speaker.act(target_image) speaker_action_class = np.expand_dims( to_categorical(speaker_action, num_classes=self.vocab_size), 0) image_list.append(speaker_action_class) listener_action, listener_probs = self.listener.act(image_list) if listener_action == label: speaker_reward = 1.0 listener_reward = 1.0 else: speaker_reward = 0.0 listener_reward = 0.0 self.synonym_array[int(label)][int(speaker_action)] += 1 it += 1 def play(self): y = self.create_labels(10, 100) one_hot = to_categorical(y) bar = tqdm(np.arange(self.episodes)) for i in bar: it = 0 acc = np.zeros(self.target_size) right = 0 while it < y.shape[0]: label = y[it] target_image, image_list, target_one_hot = self.sample(label) speaker_action, speaker_probs = self.speaker.act(target_image) speaker_action_class = np.expand_dims( to_categorical(speaker_action, num_classes=self.vocab_size), 0) image_list.append(speaker_action_class) listener_action, listener_probs = self.listener.act(image_list) if listener_action == label: speaker_reward = 1.0 listener_reward = 1.0 right += 1 else: speaker_reward = 0.0 listener_reward = 0.0 acc = np.vstack((acc, listener_probs)) self.speaker.save(target_image, speaker_action, speaker_probs, speaker_reward) self.listener.save(image_list, speaker_action_class, listener_action, listener_probs, listener_reward) it += 1 accuracy = right / y.shape[0] total = np.sum(self.speaker.params["rewards"]) cross = self.cross_entropy(acc[1:, :], one_hot) self.episode_rewards.append(total) self.accuracy_history.append(accuracy) self.accuracy_record.append(accuracy) bar.set_description("Cross Entropy: " + str(cross) + ", Rolling Acc 100: " + str(np.mean(self.accuracy_history)) + ", Accuracy: " + str(accuracy)) self.speaker.train() self.listener.train() self.test()
dt = datetime.datetime.utcnow() listener = Listener.get(Listener.key == data["key"]) if listener.enable: Message.create(listener=listener, data=data["data"], timestamp=dt) msg = f"{listener.description} listener new message:\n" self.notify(listener.chat_id, data['data'], msg) return {}, 200 return {}, 403 api.add_resource(Update, '/update') api.add_resource(UpdateImage, '/update_image') admin = Admin(app, url='/listener_bot_api/admin', name='ListenerBotAdmin', template_mode='bootstrap3') admin.add_view(ListenerAdmin(Listener)) admin.add_view(MessageAdmin(Message)) if __name__ == '__main__': try: Listener.create_table() Message.create_table() except: pass app.run()
class Game_Master(): def __init__(self,target_size,vocab_size,bias,test_data,seed,episodes=1000): self.data = test_data self.vocab_size = vocab_size self.target_size = target_size self.speaker_bias = 1.0 - bias self.listener_bias = bias self.speaker = Speaker(512,self.target_size,self.vocab_size,self.speaker_bias,seed) self.listener = Listener(512,self.vocab_size,self.target_size,self.listener_bias,seed) self.episode_rewards = [] self.accuracy_history = deque(maxlen=100) self.symbols_used = {} self.synonym_array = np.zeros((target_size,vocab_size)) self.accuracy_record = [] self.episodes = 1000 def create_labels(self,num_labels,num_repeats): arr = np.array([]) for i in range(num_labels): n = np.repeat(i,num_repeats) arr = np.concatenate((arr,n)) np.random.shuffle(arr) return arr def sample(self,label,test_or_train="X_train"): train = self.data[test_or_train] size = train[0].shape[0] target_one_hot = to_categorical(label,num_classes=self.target_size) target_image = 0 image_list = [] for i in range(self.target_size): sampled_image = np.expand_dims(train[i][np.random.choice(size),:],0) if i == label: target_image = sampled_image image_list.append(sampled_image) return target_image, image_list, target_one_hot def cross_entropy(self,predictions, targets, epsilon=1e-12): predictions = np.clip(predictions, epsilon, 1. - epsilon) N = predictions.shape[0] ce = -np.sum(np.sum(targets*np.log(predictions+1e-9)))/N return ce def test(self): y = self.create_labels(10,1) one_hot = to_categorical(y) it = 0 while it < y.shape[0]: label = y[it] target_image, image_list, target_one_hot = self.sample(label,"X_test") speaker_action, speaker_probs = self.speaker.act(target_image) speaker_action_class = np.expand_dims(to_categorical(speaker_action,num_classes=self.vocab_size),0) image_list.append(speaker_action_class) listener_action, listener_probs = self.listener.act(image_list) if listener_action == label: speaker_reward = 1.0 listener_reward = 1.0 else: speaker_reward = 0.0 listener_reward = 0.0 self.synonym_array[int(label)][int(speaker_action)] += 1 it += 1 def play(self): y = self.create_labels(10,100) one_hot = to_categorical(y) bar = tqdm(np.arange(self.episodes)) for i in bar: it = 0 acc = np.zeros(self.target_size) right = 0 while it < y.shape[0]: label = y[it] target_image, image_list, target_one_hot = self.sample(label) speaker_action, speaker_probs = self.speaker.act(target_image) speaker_action_class = np.expand_dims(to_categorical(speaker_action,num_classes=self.vocab_size),0) image_list.append(speaker_action_class) listener_action, listener_probs = self.listener.act(image_list) if listener_action == label: speaker_reward = 1.0 listener_reward = 1.0 right += 1 else: speaker_reward = 0.0 listener_reward = 0.0 acc = np.vstack((acc,listener_probs)) self.speaker.save(target_image,speaker_action,speaker_probs,speaker_reward) self.listener.save(image_list,speaker_action_class,listener_action,listener_probs,listener_reward) it += 1 accuracy = right/y.shape[0] total = np.sum(self.speaker.params["rewards"]) cross = self.cross_entropy(acc[1:,:],one_hot) self.episode_rewards.append(total) self.accuracy_history.append(accuracy) self.accuracy_record.append(accuracy) bar.set_description("Cross Entropy: " + str(cross) + ", Rolling Acc 100: " + str(np.mean(self.accuracy_history)) + ", Accuracy: " + str(accuracy)) self.speaker.train() self.listener.train() self.test()
def get_current_listeners(chat_id): return Listener.select().where(Listener.chat_id == chat_id, Listener.enable)