Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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()
Ejemplo n.º 10
0
        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()
Ejemplo n.º 11
0
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()
Ejemplo n.º 12
0
def get_current_listeners(chat_id):
    return Listener.select().where(Listener.chat_id == chat_id,
                                   Listener.enable)