Exemple #1
0
    def fit(self,
            completions,
            workdir=None,
            batch_size=32,
            n_epochs=10,
            **kwargs):
        """This is where training happens: train your model given list of completions, then returns dict with created links and resources"""
        img_urls, img_classes = [], []
        print('Collecting completions...')

        for completion in completions:
            if is_skipped(completion):
                continue
            img_urls.append(completion['data'][self.value])
            img_classes.append(get_choice(completion))

        print('Creating dataset...')
        data = ImageClassifierDataset(img_urls, img_classes)
        datagen = ImageDataGenerator(featurewise_center=True,
                                     featurewise_std_normalization=True)

        print('Training model...')
        self.reset_model()
        self.model.train(data.images, data.labels, datagen)

        print('Save model...')
        model_path = os.path.join(workdir, 'model.ckpt')
        self.model.save(workdir)

        return {'model_path': model_path, 'classes': data.labels}
Exemple #2
0
    def fit(self,
            completions,
            workdir=None,
            batch_size=32,
            num_epochs=10,
            **kwargs):
        image_urls, image_classes = [], []
        print('Collecting completions...')
        for completion in completions:
            if is_skipped(completion):
                continue
            image_urls.append(completion['data'][self.value])
            image_classes.append(get_choice(completion))

        print('Creating dataset...')
        dataset = ImageClassifierDataset(image_urls, image_classes)
        dataloader = DataLoader(dataset, shuffle=True, batch_size=batch_size)

        print('Train model...')
        self.reset_model()
        self.model.train(dataloader, num_epochs=num_epochs)

        print('Save model...')
        model_path = os.path.join(workdir, 'model.pt')
        self.model.save(model_path)

        return {'model_path': model_path, 'classes': dataset.classes}
Exemple #3
0
    def fit(self, completions, workdir=None, **kwargs):

        annotations = []
        for completion in completions:
            if is_skipped(completion):
                continue
            image_path = get_image_local_path(completion['data'][self.value])
            image_label = get_choice(completion)
            annotations.append((image_path, image_label))

        # Create dataset
        ds = tf.data.Dataset.from_tensor_slices(annotations)

        def prepare_item(item):
            label = tf.argmax(item[1] == self.labels)
            img = tf.io.read_file(item[0])
            img = tf.image.decode_jpeg(img, channels=3)
            img = tf.image.resize(img, [self.image_height, self.image_width])
            return img, label

        ds = ds.map(prepare_item, num_parallel_calls=tf.data.AUTOTUNE)
        ds = ds.cache().shuffle(buffer_size=1000).batch(
            self.batch_size).prefetch(buffer_size=tf.data.AUTOTUNE)

        self.model.compile(optimizer=tf.keras.optimizers.Adam(),
                           loss=tf.keras.losses.SparseCategoricalCrossentropy(
                               from_logits=True),
                           metrics=['acc'])
        self.model.fit(ds, epochs=self.epochs)
        model_file = os.path.join(workdir, 'checkpoint')
        self.model.save_weights(model_file)
        return {'model_file': model_file}