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}
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}
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}