def train(self, epoch):
        trace('making vocabularies ...')
        self.trg_vocab = Vocabulary.new(gens.word_list(self.target), self.vocab)

        trace('making model ...')

        trace('epoch %d/%d: ' % (epoch + 1, self.epoch))
        opt = optimizers.AdaGrad(lr=0.01)
        opt.setup(self.encdec)
        opt.add_hook(optimizer.GradientClipping(5))
        gen1 = gens.word_list(self.target)
        gen = gens.batch(gen1, self.minibatch)

        for trg_batch in gen:
            self.batch_size = len(trg_batch)
            self.trg_batch = fill_batch(trg_batch)
            if len(trg_batch) != self.minibatch:
                break
            self.encdec.clear(self.batch_size)
            self.__forward_img()
            self.encdec.reset(self.batch_size)
            loss, hyp_batch = self.__forward_word(self.trg_batch, self.encdec, True, 0)
            loss.backward()
            opt.update()
            K = len(self.trg_batch) - 2
            self.print_out(K, hyp_batch, epoch)
Esempio n. 2
0
    def train(self, epoch):
        trace('making vocabularies ...')
        self.trg_vocab = Vocabulary.new(gens.word_list(self.target),
                                        self.vocab)

        trace('making model ...')

        trace('epoch %d/%d: ' % (epoch + 1, self.epoch))
        opt = optimizers.AdaGrad(lr=0.01)
        opt.setup(self.encdec)
        opt.add_hook(optimizer.GradientClipping(5))
        gen1 = gens.word_list(self.target)
        gen = gens.batch(gen1, self.minibatch)

        for trg_batch in gen:
            self.batch_size = len(trg_batch)
            self.trg_batch = fill_batch(trg_batch)
            if len(trg_batch) != self.minibatch:
                break
            self.encdec.clear(self.batch_size)
            self.__forward_img()
            self.encdec.reset(self.batch_size)
            loss, hyp_batch = self.__forward_word(self.trg_batch, self.encdec,
                                                  True, 0)
            loss.backward()
            opt.update()
            K = len(self.trg_batch) - 2
            self.print_out(K, hyp_batch, epoch)
Esempio n. 3
0
    def __init__(self):
        self.parameter_dict = {}
        train_path = APP_ROOT + "/Data/"

        self.parameter_dict["id2image"] = train_path + "index2img_exclude.txt"
        self.parameter_dict["id2caption"] = train_path + "index2caption.txt"
        self.parameter_dict["target"] = train_path + "index2caption.txt"
        self.parameter_dict["vocab"] = 5000
        self.parameter_dict["embed"] = 300
        self.parameter_dict["hidden"] = 500
        self.parameter_dict["epoch"] = 20
        self.parameter_dict["minibatch"] = 64
        self.parameter_dict["generation_limit"] = 256
        self.parameter_dict["use_gpu"] = False
        self.parameter_dict["gpu_id"] = -1
        self.parameter_dict["choose_model"] = "Alex_Model"

        if self.parameter_dict["choose_model"] == "Alex_Model":
            self.insize = 224
        if self.parameter_dict["choose_model"] == "AlexBn_Model":
            self.insize = 227

        mean_image = pickle.load(open("mean.npy", 'rb'))

        cropwidth = 256 - self.insize
        self.start = cropwidth // 2
        self.stop = self.start + self.insize
        self.mean_image = mean_image[:, self.start:self.stop,
                                     self.start:self.stop].copy()

        self.x_batch = np.ndarray(
            (self.parameter_dict["minibatch"], 3, self.insize, self.insize),
            dtype=np.float32)
        self.y_batch = np.ndarray((self.parameter_dict["minibatch"]),
                                  dtype=np.int32)

        self.trg_vocab = Vocabulary.new(
            gens.word_list(self.parameter_dict["target"]),
            self.parameter_dict["vocab"])
        self.read_data = Read_Data(self.parameter_dict["id2image"],
                                   "Data/val2014_resize",
                                   self.parameter_dict["id2caption"])
        self.read_data.load_image_list()
        self.read_data.load_caption_list()
    def __init__(self, use_gpu, gpu_id):
        self.parameter_dict = {}
        train_path = APP_ROOT + "/../../Chainer_Image_Caption_Neural_Network/Code/Data/"
        self.resize_image_path = APP_ROOT + "/../../Chainer_Image_Caption_Neural_Network/Code/"

        self.parameter_dict["id2image"]         = train_path + "index2img_exclude.txt"
        self.parameter_dict["id2caption"]       = train_path + "index2caption.txt"
        self.parameter_dict["target"]           = train_path + "index2caption.txt"
        self.parameter_dict["vocab"]            = 5000
        self.parameter_dict["embed"]            = 300
        self.parameter_dict["hidden"]           = 200
        self.parameter_dict["epoch"]            = 20
        self.parameter_dict["minibatch"]        = 110 
        self.parameter_dict["generation_limit"] = 256
        self.parameter_dict["use_gpu"]          = use_gpu
        self.parameter_dict["gpu_id"]           = gpu_id
        self.parameter_dict["choose_model"] = "Alex_Model"

        if self.parameter_dict["choose_model"] == "Alex_Model":
            self.insize = 224
        if self.parameter_dict["choose_model"] == "AlexBn_Model":
            self.insize = 227

        mean_image = pickle.load(open("mean.npy", 'rb'))

        cropwidth = 256 - self.insize
        self.start = cropwidth // 2
        self.stop = self.start + self.insize
        self.mean_image = mean_image[:, self.start:self.stop, self.start:self.stop].copy()

        self.x_batch = np.ndarray((self.parameter_dict["minibatch"], 3,
                                   self.insize, self.insize), dtype=np.float32)
        self.y_batch = np.ndarray((self.parameter_dict["minibatch"]),
                                  dtype=np.int32)

        self.trg_vocab = Vocabulary.new(gens.word_list(self.parameter_dict["target"]), self.parameter_dict["vocab"])
        self.read_data = Read_Data(self.parameter_dict["id2image"],
                                   "Data/val2014_resize",
                                   self.parameter_dict["id2caption"])
        self.read_data.load_image_list()
        self.read_data.load_caption_list()
Esempio n. 5
0
    def train(self):
        trace('making vocabularies ...')
        trg_vocab = Vocabulary.new(gens.word_list(self.target), self.vocab)

        trace('making model ...')

        for epoch in range(self.epoch):
            trace('epoch %d/%d: ' % (epoch + 1, self.epoch))
            trained = 0
            opt = optimizers.AdaGrad(lr=0.01)
            opt.setup(self.encdec)
            opt.add_hook(optimizer.GradientClipping(5))
            gen1 = gens.word_list(self.target)
            gen = gens.batch(gen1, self.minibatch)

            random_number = random.randint(0, self.minibatch - 1)
            for trg_batch in gen:
                self.trg_batch = fill_batch(trg_batch)
                if len(self.trg_batch) != self.minibatch:
                    break
                hyp_batch, loss = self.forward(trg_vocab, self.use_gpu,
                                               self.gpu_id)
                loss.backward()
                opt.update()
                K = len(self.trg_batch)

                if trained == 0:
                    self.print_out(random_number, epoch, trained, hyp_batch)

                trained += K

        trace('saving model ...')
        prefix = self.model
        trg_vocab.save(prefix + '.trgvocab')
        self.encdec.save_spec(prefix + '.spec')
        serializers.save_hdf5(prefix + '.weights', self.encdec)

        trace('finished.')
    def train(self):
        trace('making vocabularies ...')
        trg_vocab = Vocabulary.new(gens.word_list(self.target), self.vocab)

        trace('making model ...')

        for epoch in range(self.epoch):
            trace('epoch %d/%d: ' % (epoch + 1, self.epoch))
            trained = 0
            opt = optimizers.AdaGrad(lr=0.01)
            opt.setup(self.encdec)
            opt.add_hook(optimizer.GradientClipping(5))
            gen1 = gens.word_list(self.target)
            gen = gens.batch(gen1, self.minibatch)

            random_number = random.randint(0, self.minibatch - 1)
            for trg_batch in gen:
                self.trg_batch = fill_batch(trg_batch)
                if len(self.trg_batch) != self.minibatch:
                    break
                hyp_batch, loss = self.forward(trg_vocab, self.use_gpu, self.gpu_id)
                loss.backward()
                opt.update()
                K = len(self.trg_batch)

                if trained == 0:
                    self.print_out(random_number, epoch, trained, hyp_batch)

                trained += K

        trace('saving model ...')
        prefix = self.model
        trg_vocab.save(prefix + '.trgvocab')
        self.encdec.save_spec(prefix + '.spec')
        serializers.save_hdf5(prefix + '.weights', self.encdec)

        trace('finished.')